0

在颜色索引视图中,下面会生成一个可点击的链接,将我带到颜色显示视图。

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

在模型中,我有:

class Color < ActiveRecord::Base
  belongs_to :product    

我也有一个产品索引视图,我想创建一个指向彩色显示视图的可点击链接,但我无法让它工作。

这不起作用(一方面, 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>

显然也可以在一行上完成,但是两行使代码更具可读性(我认为)

我不明白为什么有人认为有必要降级这个问题。

4

2 回答 2

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>是否有一对多的关系

于 2013-06-06T08:25:08.550 回答
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 回答