私はこれらの Railscast エピソードに似たようなことをしています:
http://railscasts.com/episodes/165-edit-multiple
http://railscasts.com/episodes/52-update-through-checkboxes
問題は、それらが選択したモデルのみを変更しようとしていることです。すべてのモデルを更新する必要があります。
私が最初に気付いたのは、id not in ()
期待どおりにすべてを返すわけではないため、空のリストの特別なケースを作成する必要があったことです。
このコードは機能しますが、あまり DRY ではないようです。少なくとも、通常のケースを 1 行にマージできるはずです。
def update_published
if params[:book_ids].empty?
Book.update_all(published: false)
else
Book.where(id: params[:book_ids]).update_all(published: true)
Book.where("id not in (?)", params[:book_ids]).update_all(published: false)
end
redirect_to books_path
end
改善のためのアイデアをいただければ幸いです。