0

这将是非常基本的,但我是 Rails 的新手,请帮忙。我在名为@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

4 回答 4

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)

于 2013-05-22T10:49:16.057 回答
0

Try this

<% 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 %>
于 2013-05-22T11:44:17.190 回答
0

首先将您的结果放入一个数组中,因此可能在控制器中类似于:

@results = @product.results

然后在视图中:

<% @results.each_with_index do |result, index|
  <% if result.brand_id == @results[index.next].brand_id %>
    # do something
  <% end %>
<% end %>
于 2013-05-22T12:14:12.190 回答
0

您可以使用“包括?” ruby 方法代替

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

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

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

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

于 2013-05-22T11:20:55.717 回答