Rails单选按钮用于标记关联项列表中的一项?

时间:2012-04-06 14:25:40

标签: ruby-on-rails radio-button

基本上,我和this one有同样的问题,遗憾的是,这个问题从来没有得到令人满意的答案。

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

感谢任何帮助帮助我获得正确的语法。或者这可能不是我尝试完成的正确方法吗?

2 个答案:

答案 0 :(得分:2)

将all的illing_address的默认值设置为false。现在在单选按钮字段中,为每个地址字段设置其自己的id作为相应单选按钮的值。然后在控制器中找到与从表单获得的id相对应的地址,然后将其billing_address更新为true。

答案 1 :(得分: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