我有两个模型shop
和user
。购物has_many
用户和用户has_one
购物。我正在尝试在shop/show
上创建一个按钮,允许用户选择其商店。该按钮应将参数shop_id
发送到Users_Controller#update_shop
,然后将User.shop_id
更改为页面上商店的ID。
Users_Controller#update_shop
中的当前方法如下:
def update_shop
@user = User.find(params[:id])
@user.update_attributes(shop_id: params[:shop][:id])
flash[:success] = "Added Shop!"
end
show/shop
上的按钮是这样的:
<%= form_for User.update_shop, remote: true do |f| %>
<%= f.hidden_field :shop_id, value: @shop.id %>
<%= f.submit 'Add As Your Shop', :class => 'button blue-button' %>
<% end %>
我为#`收到错误NoMethodError in ShopsController#show undefined method
update_shop'。该方法在用户控制器中定义。
我知道通过关联更新User.shop_id
可能是一种更有效的方法,因此非常感谢您提供有关这样做或让其发挥作用的提示。
答案 0 :(得分:1)
我认为最好使用POST方法代替表单:
<%= link_to 'Add As Your Shop', update_shop_url(id: @user.id, shop_id: @shop.id, class: 'button blue-button', data: { method: 'post' } %>
使用此设置,您还应更改控制器方法:
def update_shop
...
@user.update_attributes(shop_id: params[:shop_id])
...
end