Rails 4, nested attributes, Could not find tag with id = for face with id =

Rails 4: I want to create Person with tags

person = Person.new(:name=>Jon', :tags_attributes=>[{:id=>'15', :name=>'some_tag'}]) 

My face model:

 class Person < ActiveRecord::Base validates :name, presence: true belongs_to :user has_many :organizations, through: :people_organizations has_and_belongs_to_many :tags, join_table: :people_tags has_many :phones, as: :phoneable, :dependent => :destroy has_many :emails, as: :emaileable, :dependent => :destroy has_many :networks, as: :networkable, :dependent => :destroy has_many :messengers, as: :messengerable, :dependent => :destroy accepts_nested_attributes_for :phones, :emails, :networks, :messengers, allow_destroy: true accepts_nested_attributes_for :tags, reject_if: :all_blank end 

My PeopleController:

  def create @person = Person.new(person_params) respond_to do |format| if @person.save(validate: false) format.json { render action: 'show', status: :created } else format.json { render json: @person.errors, status: :unprocessable_entity } end end end def person_params params.require(:person).permit(:id, :name, :born, :description, phones_attributes:[:id, :number, :_destroy], emails_attributes:[:id, :email, :_destroy] networks_attributes:[:id, :name, :_destroy], messengers_attributes:[:id, :identifier, :_destroy], tags_attributes:[:id, :name, :_destroy] ) end 

When I create a new person, I have a mistake

 p = Person.new(:name=>'Jon', :tags_attributes=>[{:id=>'15', :name=>'tag'}]) 

Could not find tag with ID = 15 for person with ID =

Please tell me what to do to save the model.

+4
source share
1 answer

I have the same problem. I think the rails just don't support creating a new record with an existing nested record. I did not find a solution for this situation at all. So, try filtering attribute_tags from person_params and then use tag_ids tags like this:

 tag_ids = params[:person][:tags_attributes].map { |tag| tag[:id] } @person = Person.new(person_params.merge({ tag_ids: tag_ids }) 
0
source

Source: https://habr.com/ru/post/1502476/


All Articles