基本上,我和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 %>
感谢任何帮助帮助我获得正确的语法。或者这可能不是我尝试完成的正确方法吗?
答案 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