1 ruby model-view-controller ruby-on-rails
我在Rails中创建应用程序时遇到问题.
该应用程序有两个模型,一个代表公司,另一个代表产品.每家公司都销售零件或更多产品,我希望在模型中捕捉这种关系.这是我到目前为止所得到的:
我通过运行生成器创建了模型:
script/generate scaffold company name:string product_id:integer
script/generate scaffold product name:string
Run Code Online (Sandbox Code Playgroud)
我在公司模型中添加了以下行,以表明每个公司可以有多个产品:
has_many :products
Run Code Online (Sandbox Code Playgroud)
我在产品型号中添加了以下行:
belongs_to :company
Run Code Online (Sandbox Code Playgroud)
我在YAML文件中创建了一些示例数据.这些公司的样本数据是:
microsoft:
name: Microsoft
product_id: [1, 3]
google:
name: Google
product_id: [2, 4]
Run Code Online (Sandbox Code Playgroud)
产品的样本数据是:
word:
id: 1
name: Word
earth
id: 2
name: Earth
excel:
id: 3
name: Excel
chrome:
id: 4
name: Chrome
Run Code Online (Sandbox Code Playgroud)
然后我加载了示例数据:
rake db:fixtures:load
Run Code Online (Sandbox Code Playgroud)
然后,我在公司视图中尝试打印公司的所有产品:
<% if @company.product_id %>
<% for product in @company.product_id %>
<tr>
<td><%=h product.name %></td>
</tr>
<% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
这是我收到错误的地方.有任何想法吗?我不确定问题是什么.据我所知,这可能是我如何生成模型或建立他们的关系.或者可能是我试图在视图中打印信息.
首先,你的字段设置错误了. has_many
并belong_to
要求它是products
有company_id
而不是相反的方式.对于一对多关系,外键总是需要放在等式的"多"侧.
然后你想要这个:
<% for product in @company.products %>
<tr>
<td><%=h product.name %></td>
</tr>
<% end %>
Run Code Online (Sandbox Code Playgroud)