我正在使用Rails 4.1并试图设置一个看似简单的范围方法,但我似乎无法理解。
高级数据模型是:
class Request < ActiveRecord::Base
has_many :items, dependent: :destroy
has_many :actions, through: :items
end
class Item < ActiveRecord::Base
belongs_to :request
belongs_to :action
end
class Action < ActiveRecord::Base
enum usertype: { isnormal: 0, isadmin: 1 }
end
对于我们的应用,Request
如果其相关操作“usertype
设置为isadmin
,则表示为管理请求。
我正在尝试设置范围方法(或类似的方法),我们可以通过Request.admin
的某些内容检索管理请求,并通过Request.normal
检索正常请求。
我似乎无法绕过如何将任何东西连在一起来检索它们。
答案 0 :(得分:1)
class Request < ActiveRecord::Base
has_many :items, dependent: :destroy
has_many :actions, through: :items
scope :with_usertype, -> (type) { joins(:actions).where(actions: {usertype: Action.usertypes[type]}) }
scope :admin, -> { with_usertype(:isadmin) }
scope :normal, -> { with_usertype(:isnormal) }
end
答案 1 :(得分:1)
我终于能够找到解决问题的方法了。我不知道这是最好的方法,但它很有效,看起来很简单直接。 (而且我不知道为什么花了这么长时间才得到它。)
class Request < ActiveRecord::Base
has_many :items, dependent: :destroy
has_many :actions, through: :items
scope :isadmin, -> { joins(:actions).where(actions: {usertype: Action.usertypes[:isadmin]}) }
scope :isnormal, -> { where.not(id: isadmin.pluck(:id)) }
end