查询Rails Association

时间:2015-08-31 12:34:28

标签: ruby ruby-on-rails-4 associations

我有两种模式:商店和用户。用户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参数时,如何创建正确的关联?

1 个答案:

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