在Rails中建立has_many关系

时间:2009-12-02 17:43:18

标签: ruby-on-rails ruby model-view-controller

我在Rails中创建应用程序时遇到了麻烦。

此应用程序有两个模型,一个代表公司,另一个代表产品。每家公司都销售零件或更多产品,我希望在模型中捕捉这种关系。这是我到目前为止所得到的:

我通过运行生成器来创建模型:

script/generate scaffold company name:string product_id:integer

script/generate scaffold product name:string

我在公司模型中添加了以下行,以表明每家公司都可以拥有多个产品:

has_many :products

我在产品型号中添加了以下行:

belongs_to :company

我在YAML文件中创建了一些示例数据。公司的样本数据是:

microsoft:
  name: Microsoft
  product_id: [1, 3]

google:
  name: Google
  product_id: [2, 4]

产品的样本数据是:

word:
  id: 1
  name: Word

earth
  id: 2
  name: Earth

excel:
  id: 3
  name: Excel

chrome:
  id: 4
  name: Chrome

然后我加载了样本数据:

rake db:fixtures:load

然后我尝试在公司视图中打印公司的所有产品:

<% if @company.product_id %>
<% for product in @company.product_id %>
  <tr>
    <td><%=h product.name %></td>
  </tr>
<% end %>
<% end %>

这是我收到错误的地方。有任何想法吗?我不确定问题是什么。据我所知,这可能是我如何生成模型或建立他们的关系。或者可能是我试图在视图中打印信息。

2 个答案:

答案 0 :(得分:7)

首先,您的字段设置错误。 has_manybelong_to要求products company_id而不是<% for product in @company.products %> <tr> <td><%=h product.name %></td> </tr> <% end %> 而不是相反。对于一对多关系,外键总是需要放在等式的“多”侧。

然后你想要这个:

{{1}}

答案 1 :(得分:0)

您没有说出您的错误是什么,但我相信您的yml文件不太正确。

上次检查时,这是不可能的:

microsoft:
  name: Microsoft
  product_id: [1, 3]

product_id:“list”只接受“标签” - &gt; Word,Excel。但是它会产生“奇怪的”id(使用标记字符串的哈希)。所以它也不会很好。

而且,正如其他人所说,如果你将client_id放在产品中会更容易。这就是数据库的工作方式。