Rails accepts_nested_attributes_for 关联模型未创建

Rails accepts_nested_attributes_for associated models not created

我有两个模型(CompanyUser)有 belongs_to/has_many 关系。

class Company < ActiveRecord::Base
    attr_accessor :users_attributes
    has_many :users
    accepts_nested_attributes_for :users, allow_destroy: true
end

class User < ActiveRecord::Base
    belongs_to :company
end

在我的 CompaniesController 中,我想创建一个 Company 的新实例以及一组 Users

class Cms::CompaniesController < ApplicationController
    def create
        company = Company.new(company_params)

        respond_to do |format|
            if company.save
                format.json { render json: company, status: :ok }
            else
                format.json { render json: company.errors.messages, status: :bad_request }
            end
        end
    end

    private

    def company_params
        params.require(:company).permit(
            :id, 
            :name, 
            users_attributes: [
                :id,
                :_destroy,
                :first_name,
                :last_name,
                :email
            ]
        )
    end
end

当我调用 company.save 时,我希望保存 Company 的新实例以及 User 的几个新实例,具体取决于我的用户数量参数,但是没有用户被保留。

这是 company_params 的示例:

{"id"=>nil, "name"=>"ABC", "users_attributes"=>[{"first_name"=>"Foo", "last_name"=>"Bar", "email"=>"foo@bar.com"}]}

我在这里错过了什么?

移除attr_accessor:

class Company < ActiveRecord::Base
    has_many :users
    accepts_nested_attributes_for :users, allow_destroy: true
end

其他一切都应该有效。

--

attr_accessor 在您的 class.

中创建 getter/setter 方法

主要用于virtual attributes(未保存到数据库的)。您当前的设置阻止您保存 users_attributes 参数,因此您的 users 没有保存。