使用HABTM模型自动将外键从视图传递到控制器

时间:2014-11-13 14:02:08

标签: ruby-on-rails many-to-many has-and-belongs-to-many hidden-field

我有两个模型,公司和员工,他们之间有多对多的关联。

class Company < ActiveRecord::Base
    has_and_belongs_to_many :employees
end

class Employee < ActiveRecord::Base
    has_and_belongs_to_many :companies
end

我有一个联接表:companies_employees

class CreateCompaniesEmployeesJoin < ActiveRecord::Migration
    def change
       create_table :companies_employees, :id => false do |t|
          t.integer "company_id"
          t.integer "employee_id"
       end
       add_index :companies_employees, ["company_id", "employee_id"]
    end
end

我有一个公司的显示视图,其中包括一个form_for添加一个新的员工,我想通过HABTM协会与该公司关联:

<%= form_for :employee, :url => employees_path do |f| %>
    <p>
        <%= f.label :name %>
        <%= f.text_field :name, class: 'form-control' %>
    </p>
    <br>
    <p>
        <%= f.hidden_field :company_id, :value => @company.id  %>
    </p>
    <p>
        <%= f.submit "Save Employee", class: "btn btn-default" %>
    </p>

<% end %> 

我有一个Employee控制器,我想通过该控制器创建一个新的员工,该员工将从公司显示视图中自动与公司关联:

def create
    @company = Company.find(params[:company_id]) 
    @employee = Employee.new(employee_params)
    @company.employees << @employee

    if @employee.save
        flash[:success] = "Company Employee Added!"
        redirect_to @employee
    else
        render 'new'
    end
end

当我使用表单尝试创建新员工时,我在EmployeeController中收到错误 - &#34;找不到没有ID的公司&#34;

似乎我的观点未能将:company_id传递给EmployeeController中的create动作。

我已经搜过了其他帖子,似乎没有任何意义。任何建议最感谢!

1 个答案:

答案 0 :(得分:0)

好的,问题似乎是嵌套属性。 尝试更改EmployeesController#创建第一行:

@company = Company.find(params[:employee][:company_id])

修改

或者,也许更容易,您也可以像这样更改隐藏字段:

hidden_field_tag(:company_id, @company.id)