読者です 読者をやめる 読者になる 読者になる

よっぽどのことがない限り更新しないブログ

Ruby、JavaScriptから機械学習などの技術、スタートアップの情報まで更新する。

Railsで複数テーブルをフォームから更新する

たくさん記事はあるのだけど、フォームから複数のモデルオブジェクトを更新する方法をいつも忘れるのでメモ。
結論からいうと fields_for を使う。

_form.html.erb

<%= form_for(@store) do |f| %>
  <%= f.text_field :name %>
  <%= f.fields_for :items do |itme| %>
    <%= item.text_field :name %>
  <% end %>
  <%= f.submit "送信" %>
<% end %>

当然、Modelも関連付けてある。

store.rb

class Store < ActiveRecord::Base
  has_many :items
end

item.rb

class Item < ActiveRecord::Base
  belongs_to :store
end

ちなみにfields_forは何層もネストすることができる。
つまり、store > item > color のような形。(例えが微妙かも)

ここまでいくとファイルを分けてしまったほうが楽。

_form.html.erb

<%= f.fields_for :items do |item| %>
  <%= render 'item_fields', {f: item} %>
<% end %>

こうしてあげると_item_fields.html.erbの中でitemがfに置き換わるので、またf.fieldsからcolorのフォームをレンダリングするなどできる。