У меня есть форма, в которой есть несколько готовых тегов, которые пользователь может выбрать в сообщении. Эти теги установлены с отношением has_many through:
. Кажется, все работает, но когда я сохраняю (сообщение сохраняет), появляется Unpermitted parameter: :tags
из метода сохранения контроллера.
Модель тега:
class Tag < ApplicationRecord
has_many :post_tags
has_many :posts, through: :post_tags
end
Модель PostTag:
class PostTag < ApplicationRecord
belongs_to :tag
belongs_to :post
end
Модель поста:
class Post < ApplicationRecord
...
has_many :post_tags
has_many :tags, through: :post_tags
Методы пост-контроллера:
def update
# saves tags
save_tags(@post, params[:post][:tags])
# updates params (not sure if this is required but I thought that updating the tags might be causing problems for the save.
params[:post][:tags] = @post.tags
if @post.update(post_params)
...
end
end
...
private
def post_params
params.require(:post).permit(:name, :notes, tags: [])
end
def save_tags(post, tags)
tags.each do |tag|
# tag.to_i, is because the form loads tags as just the tag id.
post.post_tags.build(tag: Tag.find_by(id: tag.to_i))
end
end
Просмотр (теги - это флажки, отображаемые как кнопки):
<%= form.label :tags %>
<div class="box">
<% @tags.each do |tag| %>
<div class="check-btn">
<label>
<%= check_box_tag('dinner[tags][]', tag.id) %><span> <%= tag.name %></span>
</label>
</div>
<% end %>
</div>
Опять же, это сохраняет и работает нормально, но я бы хотел избавиться от Unpermitted parameter
, которое выдается в консоли.