0

Color Index View では、次のようにすると、Color Show View に移動するクリック可能なリンクが生成されます。

<% @colors.each do |color| %>
  <tr>
    <td><%= link_to color.color_name, color_path(color) %></td>

モデルには、次のものがあります。

class Color < ActiveRecord::Base
  belongs_to :product    

Product Index ビューもあり、Color Show ビューへのクリック可能なリンクを作成したいのですが、うまくいきません。

これは機能しません (1 つの理由として、 color_name はカラー テーブルの主キーではありません。

<% @products.each do |product| %>
  <tr>
    <td><%= link_to product.color_name, product.color_name, color_path(color.color_name) %></td>

モデルには、次のものがあります。

class Product < ActiveRecord::Base
  has_many :colors   

これは機能せず、カラー インデックス ビューを試すと、次のようなエラーが表示されます。

undefined local variable or method color

何か案は?

解決:

最終的に機能したのは次のとおりです。

<% color_id = Color.find_by_color_name(product.color_name) %>
<td><%= link_to product.color_name, color_path(color_id) %></td>

明らかに1行で実行することもできますが、2行の方がコードが読みやすくなります(と思います)

私が理解できないのは、誰かが質問を格下げする必要があると判断した理由です。

4

2 に答える 2

0

あなたのProduct has_many colors。したがって、コードは次のようになります。

<% @products.each do |product| %>
  <tr>
  <% product.colors.each do |color| %>
    <td><%= link_to color.color_name, color_path(color) %></td>
  <% end %>
  </tr>
<% end %>

各製品の色を繰り返し、linkそのshowパスを表示します。

注意: おそらく N+1 問題の影響を受けます。上記は、あなたに方向性を与えることになっています。

于 2013-06-06T08:29:57.577 に答える
0

color.color_nameProduct Index View にカラー オブジェクトがないため、エラーが発生しています。

<td><%= link_to product.color_name, product.color_name, color_path(product.color) %></td>1対1の関係があるかどうか試してください

<td><%= link_to product.color_name, product.color_name, color_path(product.colors.first) %></td>1対多の関係があるかどうか試してください

于 2013-06-06T08:25:08.550 に答える