0

基本上,我和这个问题有同样的问题,不幸的是,这个问题从未得到令人满意的答案。

我有一个用户模型,每个用户在地址模型中可以有多个关联地址(一对多关系)。现在,我想要完成的是,从特定用户的关联地址中,我可以指定一个地址作为帐单地址。为此,我在地址数据库表中有一个名为 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

将 all 的默认值设置illing_address为 false。现在在单选按钮字段中,为每个地址字段设置自己的 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 回答