1

У меня есть две модели (и User), которые имеют отношение belongs_to/has_many.Rails accepts_nested_attributes_for связанных моделей не создано

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 быть сохранен, в зависимости от того, сколько пользователей у меня есть в моем Params, однако ни один пользователь не сохраняется.

Вот пример того, что company_params выглядит следующим образом:

{"id"=>nil, "name"=>"ABC", "users_attributes"=>[{"first_name"=>"Foo", "last_name"=>"Bar", "email"=>"[email protected]"}]} 

Что я здесь отсутствует?

+0

На первый взгляд вы выглядите здорово, но мне любопытно узнать, что произойдет, если вы удалите 'attr_accessor: users_attributes' из модели' Company' – kjmagic13

+0

Я получаю 'Неперечисленные параметры: токен, id, users_attributes' при вызове 'company = Company.new (company_params)' и значение 'company_params' теперь просто' {"name" => "ABC"} '. Интересно, однако, если я вставляю 'binding.pry' прямо перед этой строкой и копирую/вставляю код для определения' company_params', вызов 'Company.new (company_params)' создает компанию AND пользователей. Это не имеет никакого смысла ... – ACIDSTEALTH

+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 не сохраняются.

+0

Вот и все! благодаря – ACIDSTEALTH

 Смежные вопросы

  • Нет связанных вопросов^_^