【问题标题】:Rails has_and_belongs_to_many on 2 level associationRails has_and_belongs_to_many 2 级关联
【发布时间】:2016-10-31 09:05:21
【问题描述】:

这与之前问过的question有关

我在 Product 和 Supplier 之间设置了 has_and_belongs_to_many。

在我看来,我使用:

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

在我的表格中为每个产品的每一行显示以逗号分隔的供应商列表。

我现在需要在发票索引视图中显示相同的列表。 Invoices 表有一列 PRODUCT。我已经在 Invoice 模型上设置了 belongs_to :product。

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

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

但它会返回

错误未定义的局部变量或方法`product'

为什么这不起作用?我该如何解决?提前致谢。

【问题讨论】:

  • 每张发票是否只针对一种产品?这听起来不对。通常你会有类似 InvoiceLineItem 模型来将发票与产品相关联。顺便说一句,对于您的第一个查询,请尝试:product.suppliers.map(&:NAME).to_sentence(名称真的大写吗?)
  • 这只是给出这个想法的一个例子。真实数据库是有发票行。列名是大写的不是错字。您的解决方案有效,但我必须在前面添加 invoice.。谢谢!

标签: ruby-on-rails associations


【解决方案1】:

你编译错了.map,试试

invoice.product.suppliers.pluck(:NAME).join(', ')

顺便说一句

在视图中使用逻辑是不好的做法,您应该将逻辑移动到模型中,并在视图中使用类似的东西:

<%= invoice.suppliers_names %>

应该返回什么# =&gt; 'Name_1, Name_2, etc'

【讨论】:

  • 好吧,完美,它在视图中工作。然后我创建了def suppliers_name suppliers_name = self.product.suppliers.pluck(:NAME).join(', ') end,这样现在所有东西都移到了模型上。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-21
相关资源
最近更新 更多