loop in rails view

41 views
Skip to first unread message

amvis

unread,
May 22, 2012, 9:29:04 AM5/22/12
to rubyonra...@googlegroups.com
controller
@update_coupon = JSON.parse(get_updatecpn.body)

view
1, <% @update_coupon.each do |doc| %>
2, <% if  doc["value"] == 2 %>

3, <%end%>

Here the @update_coupon getting from controller,In the controller i got all the value from @update_coupon so i need to take the value from this @update_coupon in view. so when i am trying to take the value from the @update_coupon, it gives an error can't convert string to integer in line 2

have any other way to do this view?



Guilherme Dutra

unread,
May 22, 2012, 9:32:08 AM5/22/12
to rubyonra...@googlegroups.com
I don't know if is the best solution but try a cast with to_i in doc["value"].  

doc["value"] .to_i

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-talk/-/xnmAl4-br4IJ.
To post to this group, send email to rubyonra...@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-ta...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.



--
Atenciosamente, 
Guilherme Pereira Dutra,
Fone: (34) 8407-0109

azizmb.in

unread,
May 22, 2012, 9:34:20 AM5/22/12
to rubyonra...@googlegroups.com
Also, you could clean things a little by doing:

<% @update_coupon.select{|doc| doc["value"] == 2}.each do |doc| %>
     do stuff
<% end %>

- Aziz M. Bookwala

Juan Pablo Avello

unread,
May 22, 2012, 9:37:25 AM5/22/12
to rubyonra...@googlegroups.com
 Your condition should be one of these:

* doc["value"] == "2" / doc["value"].eql?("2")
* doc["value"].to_i == 2 / doc["value"].to_i.eql?(2)

Alternatively you might as well iterate through already selected items:

@update_coupon.select{ |q| q["value].eql?('2') }each do |doc|
...

There are lots of ways of doing this to find your favourite.

amvis

unread,
May 22, 2012, 9:56:54 AM5/22/12
to rubyonra...@googlegroups.com


On Tuesday, 22 May 2012 09:34:20 UTC-4, azizmb.in wrote:
Also, you could clean things a little by doing:

<% @update_coupon.select{|doc| doc["value"] == 2}.each do |doc| %>
     do stuff
<% end %>


    Thanks all 
      i think the above one is working, but i am confused with other problem, here in my code

<% @update_coupon.each do |doc| %>
      <% if  doc["value"] == 2 %>
         //code
      <%elsif  doc["value"] == 5 %>
        //code
      <%elsif  doc["value"] == 6 %>
       //code
      <%end%>

<%end%>

so how to integrate with this @update_coupon.select{|doc| doc["value"] == 2}.each do |doc| .......?

 

On Tue, May 22, 2012 at 7:02 PM, Guilherme Dutra <guiper...@gmail.com> wrote:
I don't know if is the best solution but try a cast with to_i in doc["value"].  

doc["value"] .to_i


On Tue, May 22, 2012 at 10:29 AM, amvis <vgrkr...@gmail.com> wrote:
controller
@update_coupon = JSON.parse(get_updatecpn.body)

view
1, <% @update_coupon.each do |doc| %>
2, <% if  doc["value"] == 2 %>

3, <%end%>

Here the @update_coupon getting from controller,In the controller i got all the value from @update_coupon so i need to take the value from this @update_coupon in view. so when i am trying to take the value from the @update_coupon, it gives an error can't convert string to integer in line 2

have any other way to do this view?



--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-talk/-/xnmAl4-br4IJ.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.

For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
--
Atenciosamente, 
Guilherme Pereira Dutra,
Fone: (34) 8407-0109

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.

For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

Juan Pablo Avello

unread,
May 22, 2012, 10:23:53 AM5/22/12
to rubyonra...@googlegroups.com
What are you trying to achieve with that, exactly? Looks like grouping to me, in which case you might do in your controller:

@update_coupon = @update_coupon.group_by(&:value) 

Assuming @update_coupon is an array of a class having a value attribute, that would return a hash much alike: 
{
2 => [UC1, UC2....],
5 => [UC3, UC4...],
...
}

Once in your view you might iterate as follows:
<pre>
@update_coupon.each do |key, val|
  //code related to key, such as: <h2><%= key%></h2> 
  val.each do |update_coupon|
    // code related to each update_coupon
  end
end
</pre>



amvis

unread,
May 22, 2012, 10:36:55 AM5/22/12
to rubyonra...@googlegroups.com
basically  with that if condition, i need to show different div, 

<% @update_coupon.each do |doc| %>
      <% if  doc["value"] == 2 %>
         //code
      <%elsif  doc["value"] == 5 %>
        //code
      <%elsif  doc["value"] == 6 %>
       //code
      <%end%>

<%end%>

 
Assuming @update_coupon is an array of a class having a value attribute, that would return a hash much alike: 

Michael Pavling

unread,
May 22, 2012, 10:41:16 AM5/22/12
to rubyonra...@googlegroups.com
On 22 May 2012 15:36, amvis <vgrkr...@gmail.com> wrote:
> basically  with that if condition, i need to show different div,
>
> <% @update_coupon.each do |doc| %>
>       <% if  doc["value"] == 2 %>
>          //code
>       <%elsif  doc["value"] == 5 %>
>         //code
>       <%elsif  doc["value"] == 6 %>
>        //code
>       <%end%>
>
> <%end%>

You need a "case" statement as a starting point:

http://stackoverflow.com/questions/948135/how-to-write-a-switch-statement-in-ruby

Jeremy Walker

unread,
May 22, 2012, 10:43:38 AM5/22/12
to rubyonra...@googlegroups.com
On 22 May 2012 15:36, amvis <vgrkr...@gmail.com> wrote:


On Tuesday, 22 May 2012 10:23:53 UTC-4, Juan Pablo Avello wrote:


El martes, 22 de mayo de 2012 15:56:54 UTC+2, amvis escribió:


On Tuesday, 22 May 2012 09:34:20 UTC-4, azizmb.in wrote:
Also, you could clean things a little by doing:

<% @update_coupon.select{|doc| doc["value"] == 2}.each do |doc| %>
     do stuff
<% end %>


    Thanks all 
      i think the above one is working, but i am confused with other problem, here in my code

<% @update_coupon.each do |doc| %>
      <% if  doc["value"] == 2 %>
         //code
      <%elsif  doc["value"] == 5 %>
        //code
      <%elsif  doc["value"] == 6 %>
       //code
      <%end%>

<%end%>

You also want to be using a helper method here, maybe rendering a different partial depending on the value. When you start seeing this much logic in your view code, it's probably wise to look at helpers and partials.
 
To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-talk/-/zYGz_lHMVYUJ.

To post to this group, send email to rubyonra...@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-ta...@googlegroups.com.

Juan Pablo Avello

unread,
May 22, 2012, 10:57:50 AM5/22/12
to rubyonra...@googlegroups.com
I would still iterate the elements that way, then you may extract the div construction to several partials or a helper receiving the key and value that deals with what to render on each case. 

It may sound a bit complex, but this way you keep your views clean, which are 90% of the times the dirtiest part of an app by far, and future changes are faster to perform if you reuse that code somewhere else
Reply all
Reply to author
Forward
0 new messages