Rails2.3のNested Attributesを試してみた.
Nested Attributesを使うと更新がネストしたモデルでもできるとか。
詳しくはhttp://webtama.jp/series/railstips/articles/31を見てください.
では早速、表示させてみる
has_many throughでもできるかが気になったので試してみた
Event <---> EventsUser <---> User
こんな感じで多対多を実現
accepts_nested_attributes_forがミソでこれを指定するとネスト更新が扱えるようになる.
class Event < ActiveRecord::Base has_many :users, :through=>:events_users accepts_nested_attributes_for :users end
コントローラにインスタンス変数を作って値をネストさせる
def index @event = Event.new @event.title="EventTitle" user = User.new user.name="Satoruk" @event.users << user respond_to do |format| format.html format.xml { render :xml => @event } end end
ERBで表示
<% form_for(@event) do |f| %> <%= f.error_messages %> <% f.fields_for :users do |user_f| %> <p> nsm<%#= user_f.label :name %><br /> <%= user_f.text_field :name %> </p> <% end %> <p> <%= f.label :title %><br /> <%= f.text_field :title %> </p> <p> <%= f.submit 'Create' %> </p> <% end %>
っで実行すると
<form action="/events" class="new_event" id="new_event" method="post"><div style="margin:0;padding:0"><input name="authenticity_token" type="hidden" value="3YNVq51AjbdqB6EVzadnMPiyW5k0irUzPqVebJ3V0Kw=" /></div> <p> nsm<br /> <input id="event_users_attributes_0_name" name="event[users_attributes][0][name]" size="30" type="text" value="Satoruk" /> </p> <p> <label for="event_title">Title</label><br /> <input id="event_title" name="event[title]" size="30" type="text" value="EventTitle" /> </p> <p> <input id="event_submit" name="commit" type="submit" value="Create" /> </p> </form>
表示できたー、次は登録でも試すか