繁体   English   中英

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

[英]Passing foreign key automatically from view to controller using HABTM models

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

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的控制器,通过它我想创建一个新的Employee,它将从Company Show视图中自动与Company关联:

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中收到错误消息-“找不到没有ID的公司”

似乎我的视图无法将:company_id传递给EmployeeController中的create动作。

我搜寻了其他帖子,但似乎没有任何内容。 任何建议,不胜感激!

好的,问题似乎出在嵌套属性上。 尝试更改EmployeesController#create中的第一行:

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

编辑

另外,也可能更容易,您也可以像这样更改hidden_​​field的形式:

hidden_field_tag(:company_id, @company.id)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM