使用 join table 范围关联元素
Scope associated element with join table
我正在尝试确定我的主要用户组的范围。该组用一只猫表示:即 2.
所以我想用
这样的范围来做这件事
class User < ApplicationRecord
has_many :users_group, dependent: :destroy
has_many :groups, through: :users_group
scope :my_group, -> { self.joins(:groups).where('groups.cat = 2').limit(1) }
end
但是下面的命令不起作用:
current_user.my_group
你能指导我实现它的好方法吗?
current_user
不是 return ActiveRecord 关系,它只是 return 用户,所以你不能将它与范围链接在一起(我假设错误您收到的消息是 undefined method 'my_group' for #<User>
?)。将范围添加到您的 Group class 并通过您的 groups
has_many 关系使用它,例如
current_user.groups.my_group
正如马里奥所说,范围适用于集合,而不是实例。
如果您想保留 User
模型中的方法,您可以使用以下方法:
user.rb
def my_group
groups.find_by_cat(2)
end
使用 find_by
将 return 一个组,而不是使用 where
/ limit
。如果找不到该组,它将 return nil
.
我建议使用作用域 return 单个实例有点反模式,使用这种方法会更好,或者将以下方法放入 Group
并调用 current_user.groups.my_group
- 虽然名字 my_group
听起来有点不合适。为了完整起见,这里不管:
group.rb
def my_group
find_by_cat(2)
end
我正在尝试确定我的主要用户组的范围。该组用一只猫表示:即 2.
所以我想用
这样的范围来做这件事class User < ApplicationRecord
has_many :users_group, dependent: :destroy
has_many :groups, through: :users_group
scope :my_group, -> { self.joins(:groups).where('groups.cat = 2').limit(1) }
end
但是下面的命令不起作用:
current_user.my_group
你能指导我实现它的好方法吗?
current_user
不是 return ActiveRecord 关系,它只是 return 用户,所以你不能将它与范围链接在一起(我假设错误您收到的消息是 undefined method 'my_group' for #<User>
?)。将范围添加到您的 Group class 并通过您的 groups
has_many 关系使用它,例如
current_user.groups.my_group
正如马里奥所说,范围适用于集合,而不是实例。
如果您想保留 User
模型中的方法,您可以使用以下方法:
user.rb
def my_group
groups.find_by_cat(2)
end
使用 find_by
将 return 一个组,而不是使用 where
/ limit
。如果找不到该组,它将 return nil
.
我建议使用作用域 return 单个实例有点反模式,使用这种方法会更好,或者将以下方法放入 Group
并调用 current_user.groups.my_group
- 虽然名字 my_group
听起来有点不合适。为了完整起见,这里不管:
group.rb
def my_group
find_by_cat(2)
end