我有两种模式:商店和用户。用户belong_to
商店和商店has_many
用户。用户和商店是单独创建的,然后用户添加商店,将其shop_id
更改为@shop.id
。
我需要@shop.users
来查询belong_to
购物的所有用户。我不知道如何让这种情况发生。目前,唯一的连接是关联,当用户使用此按钮选择商店时,@user.shop_id
会更新到正确的商店:
查看:
<%= 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 = User.find(params[:id])
@shop = Shop.find(params[:shop_id])
@user.update_attributes(shop_id: @shop.id)
flash[:success] = "Added Shop!"
redirect_to @shop
end
以下是ShopsController#Customers
中的查询def customers
@shop = Shop.find(params[:id])
@customers = Shop.users
end
此查询为我提供了错误undefined method 'users' for nil:NilClass
,因此找不到用户的商品。
当用户选择商店而不仅仅是更新shop_id参数时,如何创建正确的关联?
答案 0 :(得分:-1)
您希望拥有特定商店的用户,而不是(“抽象”)Shop
模型的关系。因此,您必须在示例.users
中的商店实例上致电@shop
。
def customers
@shop = Shop.find(params[:id])
@customers = @shop.users
end
你的问题并不完全清楚,但我希望这会有所帮助。另请注意,您在问题文本中实际上询问@shop.users
,但您的代码示例为Shop.users
:)。我认为你实际上有两个问题:如何访问商店的所有用户(“如何访问相关实例?”)和“如何将对象分配给belongs_to关系”?
请注意,您的customers
方法断言可以找到具有该ID的商店(否则会引发错误)。
要设置商店,您可以像这样使用ActiveRecord:
@shop = Shop.find(params[:shop_id])
@user.shop = @shop