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