使用单选按钮分配多个属性

时间:2013-06-19 10:47:14

标签: ruby-on-rails ruby-on-rails-3 forms radio-button spree

我正在构建一个狂欢的插件,我需要在我的应用程序中。我们正在使用一家航运公司,该公司不向私人地址发货,而是向全国各地的一些包裹商店发货。因此,当用户在结账时进入交付步骤时,他/她是否必须在他/她可以接收交货的许多地方中进行选择。

我的问题是我想让用户通过单选按钮在这些地方/地址中进行选择。那么如何(或可能?)发布所选包裹商店(街道名称,城市,邮政编码等)的所有属性并将其存储为订单的送货地址?我现在拥有的是这样的:

<%= form_for @order do |f| %>
  <% @parcel_shops.each do |parcel_shop| %>
    <%= f.fields_for :ship_address, parcel_shop do |ship_form| %>
      # This is the part that i need to change
      <%= ship_form.radio_button :attributes, parcel_shop.attributes 
    <% end %>
  <% end %>
  ...
<% end %>

任何帮助都会非常感谢,提前谢谢:)!

1 个答案:

答案 0 :(得分:1)

这个答案有点复杂,但幸运的是,spree_address_book扩展中有一个很好的例子。通讯簿扩展允许用户从单选按钮中选择以前使用的地址之一,这样您就不必再次输入所有数据。

这是如何工作的关键在checkout_controller_decorator和order decorator中:

https://github.com/romul/spree_address_book/blob/master/app/controllers/spree/checkout_controller_decorator.rb https://github.com/romul/spree_address_book/blob/master/app/models/spree/order_decorator.rb

checkout_controller中的before_filter根据是输入了普通地址还是使用了单选按钮地址选择来设置地址参数。然后,订单装饰者接受两种形式的输入。

如果您只接受一种类型的送货地址,则可以将其简化,但该回购中的代码应该可以帮助您弄清楚如何执行此操作:

https://github.com/romul/spree_address_book/

相关问题