Привет, у меня проблемы с выполнением метода обновления и уничтожения в моем posts_controller, я могу создавать новые сообщения, но не могу обновлять, и я хочу знать, как уничтожить модель, уничтожая все ассоциации с другой моделью это.
Мои модели:
Почтовая модель
class Post < ApplicationRecord
has_many :comments, dependent: :destroy
has_many :has_categories
has_many :categories, through: :has_categories
validates :title, presence: true,
length: { minimum: 5 }
after_create :save_categories
def categories=(value)
@categories = value
end
private
def save_categories
@categories.each do |category_id|
HasCategory.create(category_id: category_id, post_id: self.id)
end
end
end
Модель Has_Category
class HasCategory < ApplicationRecord
belongs_to :post
belongs_to :category
end
Категория Модель
class Category < ApplicationRecord
validates :name, presence: true
has_many :has_categories
has_many :posts, through: :has_categories
end
Так что в моей частичной форме для новых и редактируемых действий это похоже на
<%= form_with model: @post, local: true do |form| %>
<!--Inputs before the categories-->
<div>
<label>Categories</label>
<% @categories.each do |category| %>
<div>
<%= check_box_tag "categories[]", category.id %> <%= category.name %>
</div>
<% end %>
</div>
<div>
<%= form.submit %>
</div>
<% end %>
Метод создания и обновления моего posts_controller
def create
@post = Post.new(post_params)
@post.categories = params[:categories]
if @post.save
redirect_to @post
else
render :new
end
end
def update
@post = Post.find(params[:id])
@post.categories = params[:categories]
if @post.update(post_params)
redirect_to @post
else
render :edit
end
end
Мое действие создания работает, но действие обновления просто обновляет входные данные до check_box_tag.
Я знаю, что метод save_categories в моей модели Post - это тот, кто берет массив, полученный из формы, и создает ассоциацию HasCategory. Как выполнить действие обновления или даже заданное действие уничтожения? Ситуация, которая является ассоциацией многих ко многим?