0

それは非常に基本的ですが、私はレールの初心者です。助けてください。@product という名前のクラス インスタンス変数にいくつかの結果があります。2 つの製品の結果を比較したい。@product には複数の ID があります。連続するIDを比較したい.Hereが私がやろうとしていることです。

<% @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

「含めますか?」を使用できますか?代わりにルビーメソッド

すべての 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 に答える
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

あなたのコードからは、何をしようとしているのかが非常に不明確ですが、かなりの数の問題があります。一つずつ:

これらすべてをビューで行いたい場合は、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

これを試して

<% 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 に答える