通过模型关联更新rails属性

时间:2015-08-31 08:29:41

标签: ruby-on-rails ruby associations

我有两个模型shopuser。购物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可能是一种更有效的方法,因此非常感谢您提供有关这样做或让其发挥作用的提示。

1 个答案:

答案 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