Ruby on rails Rails在两个级别上有很多关联

Ruby on rails Rails在两个级别上有很多关联,ruby-on-rails,associations,Ruby On Rails,Associations,这与之前提出的问题有关 在产品和供应商之间,我有一个“有”和“有”的关系 在我看来,我使用: <td><%= product.suppliers.map {|supplier| supplier.NAME }.join(', ') %></td> 要显示供应商列表,请在我的表中的每一行上用逗号分隔每个产品 我现在需要在发票索引视图上显示相同的列表。发票表有一个列PRODUCT。我已经在发票模型上设置了“属于:产品” 我尝试在我的发票索引视图中: <

这与之前提出的问题有关

在产品和供应商之间,我有一个“有”和“有”的关系

在我看来,我使用:

<td><%= product.suppliers.map {|supplier| supplier.NAME }.join(', ') %></td>

要显示供应商列表,请在我的表中的每一行上用逗号分隔每个产品

我现在需要在发票索引视图上显示相同的列表。发票表有一个列PRODUCT。我已经在发票模型上设置了“属于:产品”

我尝试在我的发票索引视图中:

<td><%= invoice.product.suppliers.map {|supplier| product.supplier.NAME }.join(', ') %></td>

但它又回来了

错误:未定义局部变量或方法“product”


为什么不起作用?我怎样才能修好它?提前感谢。

您构建了错误的
.map
,请尝试

invoice.product.suppliers.pluck(:NAME).join(', ')
顺便说一句

在视图中使用逻辑是不好的做法,您应该将逻辑移动到模型中,并在视图中使用如下内容:

<%= invoice.suppliers_names %>


什么应该返回“Name\u 1、Name\u 2等”如果构建错误
.map
,请重试

invoice.product.suppliers.pluck(:NAME).join(', ')
顺便说一句

在视图中使用逻辑是不好的做法,您应该将逻辑移动到模型中,并在视图中使用如下内容:

<%= invoice.suppliers_names %>


每个发票是否仅针对一个产品返回“名称1、名称2等”

?听起来不对。通常,您会使用类似InvoiceLineItem的模型将发票与产品关联起来。顺便说一句,对于您的第一个查询,请尝试:product.suppliers.map(&:NAME).to_句(名称真的是大写吗?)这只是一个示例。Real database yes有发票行。列名为大写,但不是打字错误。您的解决方案有效,但我必须在前面添加
发票。
。谢谢每张发票是否仅针对一种产品?听起来不对。通常,您会使用类似InvoiceLineItem的模型将发票与产品关联起来。顺便说一句,对于您的第一个查询,请尝试:product.suppliers.map(&:NAME).to_句(名称真的是大写吗?)这只是一个示例。Real database yes有发票行。列名为大写,但不是打字错误。您的解决方案有效,但我必须在前面添加
发票。
。谢谢好的,完美,它在视野中工作。然后我创建了
def-suppliers\u-name-suppliers\u-name=self.product.suppliers.pull(:name).join(',')end
,现在所有内容都移动到模型中。谢谢!好的,完美,它在视野中工作。然后我创建了
def-suppliers\u-name-suppliers\u-name=self.product.suppliers.pull(:name).join(',')end
,现在所有内容都移动到模型中。谢谢!