对于未创建的关联模型,Rails accepted_nested_attributes_

时间:2016-01-15 18:36:14

标签: ruby-on-rails ruby-on-rails-4 activerecord nested-attributes

我有两个与Company关系有关的模型(Userbelongs_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"}]}

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

删除attr_accessor

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

其他一切都应该有用。

-

attr_accessor在您的班级中创建getter / setter个方法。

它主要用于virtual attributes(未保存到数据库中的那些)。您当前的设置会阻止您保存users_attributes参数,因此您的users无法保存。