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

时间:2014-06-12 15:42:07

标签: ruby-on-rails scope

这是我的问题: 我的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) ...

我该怎么办?

2 个答案:

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