Railcastのネストされたフォームに従っています
例: 登録ページに 4 つのフィールド、編集ページに 12 のフィールドがあります (実際には、もっと基本的な情報が必要でした)。
新しい顧客が登録すると、編集ページで 12 のフィールドすべてに入力され、すべてがうまく機能しています。
しかし、古い顧客がログインすると(ネストされたフォームの作成前にすでに登録されています)、すべてのフィールドを取得するのではなく、4つのフィールドを取得するだけです
私はこのようなものを使用しています:
コントローラ
def new
@user = User.new
@user.build_user_nickname_live
@user.build_user_twitter_chipcount
@user.user_twitter_reals.build
@user.user_twitter_fakes.build
end
def edit
@user = User.find(current_user.id)
end
モデル
has_one :user_nickname_live
accepts_nested_attributes_for :user_nickname_live
has_one :user_twitter_chipcount
accepts_nested_attributes_for :user_twitter_chipcount
has_many :user_twitter_reals, :dependent => :destroy
accepts_nested_attributes_for :user_twitter_reals,
:allow_destroy => true
has_many :user_twitter_fakes, :dependent => :destroy
accepts_nested_attributes_for :user_twitter_fakes,
:allow_destroy => true
見る
<%= nested_form_for(resource, :as => resource_name,
:url => registration_path(resource_name), :html => { :method => :put }) do |f| %>
<div style="overflow: hidden;display: block;">
<%= f.fields_for :user_nickname_live do |user_nickname_live| %>
<!--span 2 and 4 with min-padding-->
<div class="span2 min-padding">
<label >Live Nickname</label>
</div>
<div class="span4 min-padding">
<div class="input-control text">
<%= user_nickname_live.text_field :nickname,:style=>"max-width: 253px;", :placeholder=>"Live nickname",:onchange=>"changeInfo();" %>
</div>
</div>
<!--ends-->
<% end %>
</div>
<div style="overflow: hidden;display: block">
<%= f.fields_for :user_twitter_chipcount do |user_twitter_chipcount| %>
<!--span 2 and 4 with min-padding-->
<div class="span2 min-padding">
<label >Chip count account</label>
</div>
<div class="span4 min-padding">
<div class="input-control text">
<%= user_twitter_chipcount.text_field :twitter_url,:style=>" max-width: 250px;", :id=>"twitter_url", :placeholder=>"Chip count account" ,:onchange=>"changeInfo();" %>
</div>
</div>
<!--ends-->
<% end %>
</div>
<div id="real-one" style="display:block;position: relative;">
<div class="add-click">
<%= f.link_to_add "", :user_twitter_reals, :class=>"icon-plus",:style=>"font-size: 14px;", :data => { :target => "#real-field" } %>
</div>
<%= f.fields_for :user_twitter_reals do |real_one| %>
<div id="real-field" style="overflow: hidden;">
<!--span 2 and 4 with min-padding-->
<div class="span2 min-padding">
<label >Real</label>
</div>
<div class="span4 min-padding">
<div class="input-control text" >
<%= real_one.text_field :twitter_url,:style=>"max-width: 250px;",:placeholder=>"Real",:onchange=>"changeInfo();" %>
<%= real_one.link_to_remove "", :class=>"icon-minus minus-click" %>
</div>
</div>
<!--ends-->
</div>
<% end %>
</div>
<div id="twitter-fake" style="display: block;position: relative;">
<div class="add-click">
<%= f.link_to_add "", :user_twitter_fakes, :class=>"icon-plus",:style=>"font-size: 14px;", :data => { :target => "#fake-field" } %>
</div>
<%= f.fields_for :user_twitter_fakes do |user_twitter_fake| %>
<div id="fake-field" style="overflow: hidden;">
<!--span 2 and 4 with min-padding-->
<div class="span2 min-padding">
<label >Fake</label>
</div>
<div class="span4 min-padding">
<div class="input-control text">
<%= user_twitter_fake.text_field :twitter_url,:style=>"max-width: 250px;",:placeholder=>"Fake",:onchange=>"changeInfo();" %>
<%= user_twitter_fake.link_to_remove "", :class=>"icon-minus minus-click" %>
</div>
</div>
<!--ends-->
</div>
<% end %>
</div>
<% end %>
お願い助けて。