как отключить добавление существующей записи в has_many через - PullRequest
1 голос
/ 09 февраля 2020

Я добавляю уникальный индекс, но запись не сохраняется, ошибка проверки. Мне нужно обновить теги в моем посте, существующие теги добавить в теги с новым идентификатором, но мне нужно, чтобы существующие теги не добавлялись

    class Tag < ApplicationRecord
  has_many :tags_posts
  has_many :tags, through: :tags_posts
  accepts_nested_attributes_for :tags_posts, :allow_destroy => true, :update_only=>true
end

    class TagsPost < ApplicationRecord
  belongs_to :post
  belongs_to :tag
  accepts_nested_attributes_for :tag, :allow_destroy => true, :update_only=>true
end

код контроллера:

def update
      @resource=resource_class.find(params[:id])
      @resource.assign_attributes(resource_params)
      if @resource.save
        render json: @resource.as_json(as_json_resource)
      else
        render json: {errors:@resource.errors}, status: :unprocessable_entity
      end
    end

      def resource_class
    Post
  end

  def resource_params
    params.require(:post).permit(:user_id,:title,:category_id, :content, :date_of_publication, tags_posts_attributes: [tag_attributes: [:name]] )
  end

1 Ответ

1 голос
/ 09 февраля 2020

Добавить id к tag_attributes

params.require(:post).permit(:user_id,..., tags_posts_attributes: [tag_attributes: [:id, :name]] )

Это предотвратит повторное добавление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...