这是我的问题: 我的User类中有一个类方法。我是从我的Shop类中的类方法调用它。
问题是,User类方法需要商店的属性group_id(Group是第三类)。
我的User类方法无法正常工作(请参阅Rails 3 Scope - Find users not in a specific group),因为它返回任何内容但它应该返回一些内容。
我的代码目前看起来像这样:
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) ...
我该怎么办?
答案 0 :(得分:1)
这里有两个问题。首先,在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
答案 1 :(得分:1)
就像错误消息所说的那样,group_id
未定义。
目前,您正在get_users_not_in_shop_group
上定义self
。这意味着函数将被调用如下:Shop.get_users_not_in_shop_group
(在类上,而不是在对象上)。由于您正在对类进行调用 - 它不知道它的group_id
是什么,因为它不是从数据库中获取的。
我认为这就是你要找的东西:
def get_users_not_in_shop_group
User.not_in_group(group_id)
end
这样,函数就在对象上,而不是类。你可以通过做这样的事情来称呼它:
Shop.find(5).get_users_not_in_shop_group