【问题标题】:Calling attributes of an associated model in the view在视图中调用关联模型的属性
【发布时间】: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

def index
    @search = Item.solr_search do
        fulltext params[:search]
        end

    @items = @search.results
   end
end

我是 RoR 的新手,因此欢迎提出任何意见。提前致谢!

编辑

这是给定 Item.first.vendors 时从 rails 控制台返回的内容

项目加载 (0.7ms) SELECT "items".* FROM "items" LIMIT 1 供应商负载(0.9ms)选择“供应商”。*从“供应商”内部连接“库存项目”在“供应商”。“id”=“库存项目”。“供应商ID”在哪里“库存项目”。“项目ID”= 1 => []

解决方案编辑 我的模型关联中有一些基本错误,不允许我利用这些关系。我通过删除重复字段(在本例中为 :item_id 和 :product_code)清理了这些关联,下面的答案完美运行。

【问题讨论】:

  • 价格方法/属性在哪里?小贩?库存物品?
  • 价格是 InventoryItem 的一个属性。我想知道我的主键设置是否混淆了活动记录。当我创建 Item 和 InventoryItem 表时,我忘了去掉它们各自的 id。这两个表应该通过产品代码属性关联,该属性是 Item 和 InventoryItem 表中的一列。我不相信它是主键。有问题吗?
  • 这肯定会成为一个问题。您可能需要在相关模型中声明 FK(外键)(不完全确定没有看到完整的代码/模型关系)。这个 SO 问题可能帮助:) - stackoverflow.com/questions/16222838/…
  • 非常有帮助的克雷格,谢谢。在查看了您链接到的 SO 问题后,我清理了我的模型关联并让一切正常。

标签: ruby-on-rails associations


【解决方案1】:

为了列出特定项目的供应商,只需替换:

<td><%= #how to return vendors? %></td>

与:

<% item.vendors.each do |vendor| %>
 <%= vendor.name %><br/> 
<% end %>

【讨论】:

  • 嗯...该代码运行正常,但在我看来没有返回任何供应商名称。我检查了我的数据库,以确保有所有必要的部分来实际返回一些东西,所以不知道该怎么做。对于一个好的控制台测试有什么想法,看看我是否可以在那里工作?
  • 在 Rails 控制台中,尝试类似:Item.first.vendors
  • 试过了,好像返回一个空数组。我在我的问题中发布了我的输出。知道为什么该数组可能为空吗?
  • 您能否检查您的实际数据库以确保连接表(即inventory_items)具有ID为1的项目的正确条目?
  • @craig.kaminsky,是的,我可以,使用 sqlit3 浏览器。查看我对您的其他问题的回答,因为我认为您可能正在处理与我的主键相关的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多