0

基本的に、これと同じ質問がありますが、残念ながら満足のいく答えは得られませんでした。

私はユーザーモデルを持っており、各ユーザーはアドレスモデルに複数の関連付けられたアドレスを持つことができます(1対多の関係)。ここで、特定のユーザーの関連付けられたアドレスから、1つのアドレスを請求先アドレスとして指定できるようにします。このために、billing_addressという名前のアドレスデータベーステーブルにブール列があります。ラジオボタンを使用してユーザーフォームに請求先住所を設定したいのですが、次のようにすべての住所を選択できる状況になります。

<%= form_for @user do |f| %>
  <%= f.fields_for :addresses do |a| %>
    <%= a.radio_button :billing_address, 1 %><%= a.label :billing_address %>
  <% end %>
<% end %>

または、次のように、billing_addressパラメーターをコントローラーに正しく送信できません。

<%= form_for @user do |f| %>
  <%= f.fields_for :addresses do |a| %>
    <%= radio_button_tag "user[addresses_attributes][billing_address]", 1 %>
  <% end %>
<% end %>

正しい構文を取得するために、ヘルプヘルプをいただければ幸いです。それとも、これは私が達成しようとしていることへの正しいアプローチではないでしょうか?

4

2 に答える 2

2

for allのデフォルト値をilling_addressfalse に設定します。ラジオ ボタン フィールドで、各アドレス フィールドに対して、対応するラジオ ボタンの値として独自の ID を設定します。次に、コントローラで、フォームから取得した ID に対応するアドレスを見つけて、それbilling_addressを true に更新します。

于 2012-04-06T15:04:53.000 に答える
0

だから、これは私が最終的に得たものです:

<%= form_for @user do |f| %>
  <%= f.fields_for :addresses do |a| %>
    <%= a.hidden_field :billing_address, :value => 0 %>
    <%= radio_button_tag "billing_address", a.object.id, a.object.billing_address == true %>
  <% end %>
<% end %>

そして私のコントローラーで:

def update
  @user = User.find(params[:id])
  if @user.update_attributes(params[:user])
    @address = @user.addresses.find(params[:billing_address])
    @address.update_attributes(:billing_address => 1)
    redirect_to users_path, notice: 'User was successfully updated.'
  else
    render action: "edit"
  end
end
于 2012-04-06T22:55:27.933 に答える