我在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 %>
这是我收到错误的地方。有任何想法吗?我不确定问题是什么。据我所知,这可能是我如何生成模型或建立他们的关系。或者可能是我试图在视图中打印信息。
答案 0 :(得分:7)
首先,您的字段设置错误。 has_many
和belong_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放在产品中会更容易。这就是数据库的工作方式。