【发布时间】:2013-07-29 17:18:06
【问题描述】:
我有三个相关模型:Vendor、Item、InventoryItem。我很难理解如何利用关联来返回关联的属性。
class Item < ActiveRecord::Base
has_many :inventory_items
has_many :vendors, through: :inventory_items
accepts_nested_attributes_for :inventory_items, :vendors
class InventoryItem < ActiveRecord::Base
belongs_to :item
belongs_to :vendor
class Vendor < ActiveRecord::Base
has_many :inventory_items
has_many :items, through: :inventory_items
我正在尝试退回出售某件商品的供应商以及他们出售该商品的价格。这是我的 SearchResults 索引视图:
<table>
<tr class="search-table">
<td>Product</td>
<td>Details</td>
<td>Brand</td>
<td>Code</td>
<td>Vendors</td>
<td>Price</td>
</tr>
<% @items.each do |item| %>
<tr class="search-table">
<td><%= item.product %></td>
<td><%= item.details %></td>
<td><%= item.brand %></td>
<td><%= item.code %></td>
<td><%= #how to return vendors? %></td>
<td><%= #how to return price? %></td>
</tr>
<% end %>
</table>
这是我的 SearchResultsController:
类 SearchResultsController 我是 RoR 的新手,因此欢迎提出任何意见。提前致谢! 编辑 这是给定 Item.first.vendors 时从 rails 控制台返回的内容 项目加载 (0.7ms) SELECT "items".* FROM "items" LIMIT 1
供应商负载(0.9ms)选择“供应商”。*从“供应商”内部连接“库存项目”在“供应商”。“id”=“库存项目”。“供应商ID”在哪里“库存项目”。“项目ID”= 1
=> [] 解决方案编辑
我的模型关联中有一些基本错误,不允许我利用这些关系。我通过删除重复字段(在本例中为 :item_id 和 :product_code)清理了这些关联,下面的答案完美运行。def index
@search = Item.solr_search do
fulltext params[:search]
end
@items = @search.results
end
end
【问题讨论】:
-
价格方法/属性在哪里?小贩?库存物品?
-
价格是 InventoryItem 的一个属性。我想知道我的主键设置是否混淆了活动记录。当我创建 Item 和 InventoryItem 表时,我忘了去掉它们各自的 id。这两个表应该通过产品代码属性关联,该属性是 Item 和 InventoryItem 表中的一列。我不相信它是主键。有问题吗?
-
这肯定会成为一个问题。您可能需要在相关模型中声明 FK(外键)(不完全确定没有看到完整的代码/模型关系)。这个 SO 问题可能帮助:) - stackoverflow.com/questions/16222838/…
-
非常有帮助的克雷格,谢谢。在查看了您链接到的 SO 问题后,我清理了我的模型关联并让一切正常。
标签: ruby-on-rails associations