【问题标题】:Rails radio button to mark one item of list of associated items?Rails单选按钮标记关联项目列表中的一项?
【发布时间】:2012-04-11 01:43:15
【问题描述】:

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

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

感谢任何帮助帮助我获得正确的语法。或者也许这根本不是我想要完成的正确方法?

【问题讨论】:

    标签: ruby-on-rails radio-button


    【解决方案1】:

    将所有illing_address 的默认值设置为false。现在在单选按钮字段中,为每个地址字段设置自己的 id 作为相应单选按钮的值。然后在controller中找到你从form中得到的id对应的地址,然后将其billing_address更新为true。

    【讨论】:

    • 好主意!这是标准解决方案吗?至少它看起来像一个魅力。我将在下面发布我的代码...
    【解决方案2】:

    这就是我最终得到的结果:

    <%= 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多