在Rails中建立has_many关系

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)

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

Bob*_*man 7

首先,你的字段设置错误了. has_manybelong_to要求它是productscompany_id而不是相反的方式.对于一对多关系,外键总是需要放在等式的"多"侧.

然后你想要这个:

<% for product in @company.products %>
  <tr>
    <td><%=h product.name %></td>
  </tr>
<% end %>
Run Code Online (Sandbox Code Playgroud)

  • 基本的RDBMS设计需要在一对多"很多"方面使用外键,因为"[something]列表"不是任何现代数据库中的列类型.这与Rails无关. (2认同)
  • 之前的评论不正确.你不想.这是不可能的.即使你想,你真的,真的,真的不想. (2认同)