0

アプリで、ユーザーがいくつかの住所から選択したり、住所を作成したりできるようにしたいと考えています。アドレスはコントラクト オブジェクト (Contract.addresse_id) 内に格納されます。

フォームを表示するページを生成するコントローラーは、@user 変数を生成します。目標は、既存のアドレスの ID を次のコントローラーに渡すか、新しいアドレスのパラメーターを渡すことです (古典的なネスト)。このページの目的はアドレスを設定することだけであり、Contract の他のフィールドは変更しないでください。

モデル コントラクトには address_id フィールドがあります。次のいずれかを選択できるラジオボタンが必要です。

  • @user.address # it is an address id
  • @user.secondary_adress # address id too
  • 独自のアドレスを作成できる空のフォーム (クラシック ネスト)

私はそれが次のように見えるはずだと思います:

<%= form_for contract do |f|%>        
<% f.label :address%>   
<% end%>

しかし、私は何をすべきかわかりません。2 つが既に存在し、3 つ目が作成される 3 つのアドレスから選択できるフォームを作成するにはどうすればよいですか?

4

2 に答える 2

0

3番目のラジオオプションを0または-1の「id」にすることができます。次に、次のコントローラーでアドレスを検索するときに、IDが偽の非IDである場合は、代わりに新しいアドレスを作成します。アドレスが新しいかどうかに基づいてそのフォームのURLを設定することにより、次のコントローラーでどちらの場合も同じビューを使用できます。例えば:

- if @address.new_record?
  - form_url = [create path]
- else
  - form_url = [update path]
...
 = form_for(@address, :url => form_url) do |f|

(これは、明らかにerbではなくhamlです。切り替えを行うことを強くお勧めします)

于 2012-11-15T19:21:58.483 に答える
0

私の問題は2つの部分にあります:

1) 既存のアドレスを選択して、対照的に配置する 2) 同じページに既存のアドレスの代わりに新しいアドレスを作成する可能性を追加する

1)私はこれをしました:

<%= form_for @contract ,:action => "confirm" do |f| %>
  <div><%= f.radio_button 'address',@user.address.id, :checked => true %>
  <%= render @user.address %>
  </div>

  <div><%= f.radio_button 'address',@user.address_secondary.id, :checked => true %>
  <%= render @user.address %>
  </div>
  <%= f.

  <%= f.submit %>
<% end %>

選択した既存のアドレスのIDを送信するだけです

2) 2 つから選択できる複雑な単一のフォームを作成する代わりに、ネストされた新しいアドレスを使用して 2 つ目のフォームを作成しました。以前のコントローラーで新しいアドレスを作成したことを意味しますが、使用しなければ問題ありません。

最終的に、私のページには異なるデータを送信する 2 つの異なるフォームがありますが、その方が簡単です。

于 2012-11-16T09:26:56.447 に答える