在“颜色索引视图”中,以下内容生成一个可单击的链接,该链接将我带到“彩色显示视图”。
<% @colors.each do |color| %>
<tr>
<td><%= link_to color.color_name, color_path(color) %></td>
在模型中,我有:
class Color < ActiveRecord::Base
belongs_to :product
我还有一个产品索引视图,我想创建一个指向Color Show View的可点击链接,但我无法使其工作。
这不起作用(一方面,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>
显然也可以在一行上完成,但是两行使代码更具可读性(我认为)
我不明白为什么有人认为有必要降级这个问题。
答案 0 :(得分:0)
color.color_name
给出错误,因为您在产品索引视图中没有颜色对象。
如果存在一对一的关系,请尝试<td><%= link_to product.color_name, product.color_name, color_path(product.color) %></td>
如果存在一对多关系,请尝试<td><%= link_to product.color_name, product.color_name, color_path(product.colors.first) %></td>
答案 1 :(得分: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问题。以上只是为了给你指路。