Rails – 使用另一个类方法中的类方法和第二个类的一个属性

这是我的问题:我的User类中有一个类方法。 我是从我的Shop类中的类方法调用它。

问题是,User类方法需要商店的属性group_id(Group是第三类)。

我的User类方法无法正常工作(请参阅Rails 3范围 – 查找不在特定组中的用户 ),因为它返回任何内容但它应该返回一些内容。

我的代码目前看起来像这样:

class User #... # Retrieve all users not in a specific group # example: User.not_in_group(Group.find(5)) def self.not_in_group(groupid) includes(:group_users).where("group_users.group_id != ?", groupid) end end class Shop belongs_to :group attr_accessible :group_id def self.get_users_not_in_shop_group User .not_in_group(:group_id) end 

在我的日志中,我得到:

 ...AND (group_users.group_id != 'group_id') ... 

我相信我应该得到类似的东西:

 ...AND (group_users.group_id != 13) ... 

我该怎么办 ?

这里有两个问题。 首先,在group_id变量的名称之前有一个分号。 因此,group_id不会被解析为变量,而是作为符号解析(为清楚起见,您可以将其视为字符串的类型)。 其次,你不应该将get_users_not_in_shop_group作为一个类级别的方法,因为你想让用户不在某个特定商店的商店组中。 你需要Shop类的一些对象来进行这样的查询。 以下是您应该对Shop课程进行的操作

 class Shop def get_users_not_in_shop_group User.not_in_group(group_id) end end 

以下是您的查询应该如何:

 Shop.find(4).get_users_not_in_shop_group # I assume this shop has group_id attribute set correctly 

就像错误消息所说的那样, group_id没有定义。

现在,您正在self定义get_users_not_in_shop_group 。 这意味着函数将被调用如下: Shop.get_users_not_in_shop_group (在类上,而不是在对象上)。 由于您正在对类进行调用 – 它不知道它的group_id是什么,因为它不是从DB中获取的。

我认为这就是你要找的东西:

 def get_users_not_in_shop_group User.not_in_group(group_id) end 

这样,函数就在对象上,而不是类。 你可以通过这样的方式来调用它:

 Shop.find(5).get_users_not_in_shop_group