Railsで異なるモデルも作成・編集できるフォームを作る
Rails: 5.2.1
fields_forを使うとひとつのフォームから複数のモデルを作成・編集することができます。
モデルの構成は、Blog has_one Category
上記はBlogモデルの編集フォームですが、入力欄3つ目の「ブログのカテゴリー」を入力して変更ボタンを押すとCategoryモデルも編集することができます。
コントローラー
Blogコントローラーを以下のようにします。
def new @blog = Blog.new @category = Category.new end def create @blog = current_user.build_blog(blog_params) @category = @blog.build_category(category_params) redirect_to root_path if @blog.save && @category.save end def edit @blog = current_user.blog @category = @blog.category end def update @blog = current_user.blog @category = @blog.category @blog.update(blog_params) @category.update(category_params) redirect_to blog_path(@blog) end
@categoryと、category用のストロングパラメータ(category_params)を用意します。
createアクションでは、@blogに紐付いたcategoryを作成するため@blog.build_category
になります。
ビュー
<%= form_for(@blog) do |form| %> <%= form.text_field :title %> <%= fields_for(@category) do |category| %> <%= category.text_field :name %> <% end %> <%= form.submit "完了" %> <% end %>
@blogのフォームにネストさせてfields_for(@category)を書きます。
便利で簡単ですね。
参考リンク
fields_for - リファレンス - - Railsドキュメント
Railsのfields_forで異なるモデルを編集するフォームを作成 | EasyRamble