Has_many:通过Rails 3 - 在连接模型中设置额外的ID

时间:2012-04-11 14:11:59

标签: ruby-on-rails ruby-on-rails-3 model sqlite

我已经汇总了一个图表来帮助解释这个问题:http://i.imgur.com/ZnN1X.png

基本上,在我的“新员工”表单中,我目前有一个员工姓名的输入字段,以及一个列出所有公司的选择框。如果我选择一家公司并点击它,它会创造一个“就业”的新记录。到目前为止,非常好。

我的问题是,在选择公司时,还需要在“就业”模式中设置类型,该模型链接到“就业类型”模型。理想情况下,我可以有两种不同类型的工作 - 但两者都列出了相同的公司。

提前致谢,非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

我不确定我是否完全理解你的问题,但我会对它进行一些检查。

员工模型:

has_many :employments, :dependent => :destroy
has_many :companies; :through=>employments
has_many :employment_types, :through=>employments

公司型号:

has_many :employments
has_many :employees; :through=>employments
has_many :employment_types, :through=>employments

就业类型模式:

has_many :employments
has_many :companies; :through=>employments
has_many :employees; :through=>employments

就业模式:

belongs_to :employee
belongs_to :company
belongs_to :employment_type

查看代码:

<%= form_for @employee do |f| %>
  <%= f.text_field :name %>
  <% 2.times do %>
    <%= f.fields_for :employments, @employee.employments.build do |employment_fields| %>
      <%= f.select :company_id, options_from_collection_for_select(Company.all, 'id', 'name') %>
      <%= f.select :employment_type_id, options_from_collection_for_select(EmploymentType.all, 'id', 'name') %>
    <% end %>
  <% end %>
<% end %>

在你的图表中,你将ID字段作为非标准(model_id),rails通常更喜欢这些只是id。但是,您可以通过将其添加到每个模型来覆盖默认主键:

set_primary_key <symbol representing primary key>