比较rails中相同类实例变量的两个元素

时间:2013-05-22 10:37:08

标签: ruby-on-rails arrays compare

这将是非常基本的,但我是铁杆的新手,请帮忙。 我在一个名为@product的类实例变量中得到了一些结果。我想比较两个产品结果。 @product有几个ID。我想比较连续的ID。这就是我想要做的。

<% @products.results.each do |result|
    bid=Brand.where("id=?",result.brand_id)
    bid1=Brand.where("id=?",result+1.brand_id)  %>
    <% if (bid==bid1) %>
       do something
    <% end %>
<% end %>

但我没有得到结果。请指导我出错的地方。

4 个答案:

答案 0 :(得分:0)

从你的代码来看,你还不清楚你想做什么,但是有很多错误。一个接一个:

如果你想在视图中完成所有这些操作,你需要将ERB标记<% %>添加到第2行和第3行,否则它们将不会被解释为ruby代码而只是打印为html。

在您的视图中拥有如此多的逻辑通常不是一个好主意 - 如果需要,更好的方法是在模型或控制器中进行比较。

result+1.brand_id会抛出错误,因为'1'没有方法'brand_id'。大概你想做result.brand_id + 1

而不是Brand.where("id=?",result.brand_id),您可以Brand.find(result.brand_id)

答案 1 :(得分:0)

你可以使用“include?”而不是ruby方法

只需将所有ID存储在数组中,然后如示例所示执行以下操作:

a = [ 1, 2, 3 ]
a.include?(1)   #=> true
a.include?(4)   #=> false

了解更多详情,请点击以下链接:

http://apidock.com/ruby/Array/include%3F

答案 2 :(得分:0)

试试这个

<% arr = @products.results.all %>
<% arr.shift %>
<% @products.results.each_with_index do |result,i| %>
    <% bid=result.brand %>
    <% if (bid==arr[i]) %>
       do something
    <% end %>
<% end %>

答案 3 :(得分:0)

首先将结果放入数组中,因此可能在控制器中使用:

@results = @product.results

然后在视图中:

<% @results.each_with_index do |result, index|
  <% if result.brand_id == @results[index.next].brand_id %>
    # do something
  <% end %>
<% end %>