上下文是一个结帐过程,用户可以从她/他的送货地址中挑选。因此,控制器动作状态:
@shipping_addresses = ShippingAddress.where(['user_id = ?', current_user.id])
我发现为首选设置一个布尔值更有吸引力,这样当用户重复结帐过程时,她/他会看到首选地址。但问题在于改变这个首选属性。
简而言之,需要创建一个单选按钮以在表单中将preferred设置为true(无论如何都要选择,取消其他按钮?)然后表单需要更新记录
def update_preferred
respond_to do |format|
if @shipping_addresses.save
@shipping_addresses = ShippingAddress.where(['user_id = ?', current_user.id]).update_all("preferred = 'false'")
-- selected_shipping_address.update("preferred = 'true'")
end
..也很难使用声明表单的语法(因为我从未远离标准的 Rails 约定......):
<%= form_for(@shipping_addresses) do |f| %>