我有两个模型,公司和员工,他们之间有多对多的关联。
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动作。
我已经搜过了其他帖子,似乎没有任何意义。任何建议最感谢!
答案 0 :(得分:0)
好的,问题似乎是嵌套属性。 尝试更改EmployeesController#创建第一行:
@company = Company.find(params[:employee][:company_id])
修改强>
或者,也许更容易,您也可以像这样更改隐藏字段:
hidden_field_tag(:company_id, @company.id)