複数のモデルを使用する複数ページのフォームを作成しようとしています。申請者がいて、この申請者には複数の住所があります (1 対多の関係)。
最初のページに申請者に関する情報を記載し、その後のページに住所のフォームを記載したいと考えています。
これは私が現時点で持っているものです:
申請者.rb
has_many :addresses, :dependent => :destroy
accepts_nested_attributes_for :addresses
アドレス.rb
belongs_to :applicant
申請者_controller.rb:
def new
session[:applicant_params] ||= {}
@applicant = Applicant.new(session[:applicant_params])
2.times do
@addresses=@applicant.addresses.build
end
session[:address_params] = @addresses.attributes
end
def create
session[:applicant_params].deep_merge!(params[:applicant]) if params[:applicant]
session[:address_params] ||= params[:address]
@applicant = Applicant.new( session[:applicant_params] )
@applicant.addresses.new(session[:address_params])
if params[:forward_button] or params[:back_button]
@applicant.current_step = session[:applicant_step]
if params[:back_button]
@applicant.previous_step
else
@applicant.next_step
end
session[:applicant_step]=@applicant.current_step
render "new"
else
.....
新しいビューで:
<%= form_for @applicant do |f| %>
<%= render "#{@applicant.current_step}_step", :f => f %>
<p><%= f.submit "Continue", :name => "forward_button" unless @applicant.last_step? %> </p>
<p><%= f.submit "Back", :name => "back_button" unless @applicant.first_step? %></p>
<% end %>
@applicant.current_step は、address_step または application_step のいずれかになり、これらは以下のとおりです。
_applicant_step.html.erb
<div class="field">
<%= f.label :first_name %><br />
<%= f.text_field :first_name ,:width=>'10px', :size=>"20", :maxlength=>"20" %>
</div>
<div class="field">
<%= f.label :middle_name %><br />
<%= f.text_field :middle_name %>
</div>
....
_address_step.html.erb
<%= f.fields_for :addresses do |u| %>
<div class="field">
<%= u.label :address %><br />
<%= u.text_area :address , :cols=> 20, :rows=>5%>
</div>
<div class="field">
<%= u.label :telephone, "Telephone Number" %><br />
<%= u.text_field :telephone %>
</div>
...
以上です。今私が抱えている問題は次のとおりです。申請者情報だけでなく住所情報も保存したいのです。そして、@applicant.addresses.new と言うだけで、応募者のセッション情報に含まれると思いましたが、そうではありませんでした (アドレス ページを取得したとき、フィールドはありませんでした!)。そこで、アドレス情報を保持する新しいセッション変数を作成しました。しかし、私には問題があります。(create アクションで) あるページから別のページに移動するたびに、新しい住所フィールド (すべての属性を含む) が作成され、フォームに追加されます。最初に 1 つのアドレスを取得し、次に 2 つのアドレスを取得します。私はこれについて間違った方法で進んでいますか?複数のモデル (関連するモデル) を含む複数ページのフォームを作成するにはどうすればよいですか? あるページから次のページに移動しても、データは消去されません..
誰か助けていただければ幸いです..ありがとう。