我有一个Rails 3应用程序,其中包含一个名为worequests
的表。
worequest.rb
模型包含:
belongs_to :statuscode
Statuscodes
有一个名为closed
的布尔字段。
我希望能够获得worequests
所有worequest.statuscode.closed == true
的列表。
例如:
def index2
@search = Worequest.closed.search(params[:q])
@worequests = @search.result
end
OR
worequests.notclosed.count
我在worequest
模型中尝试了这些:
scope :closed, joins(:statuscode).where(:statuscode.closed => true)
scope :closed, joins(:statuscode).& Statuscode.closed
scope :closed, joins(:statuscode) & Statuscode.closed
def self.closed
joins(:statuscode) & Statuscode.closed
end
def self.notclosed
joins(:statuscode) & Statuscode.notclosed
end
感谢您的帮助!
答案 0 :(得分:0)
从Rails 4开始,命名范围必须是可调用的,例如lambda:
scope :closed, -> { joins(:statuscode).where(statuscodes: { closed: true }) }
应该做的伎俩(请注意:statuscode
中的单数join
和statuscodes
条件中的复数where
表名。
答案 1 :(得分:0)
我不确定我是否正确理解了这个问题。 您是否只想在课堂上使用示波器,以便全部关闭?
class StatusCode < ActiveRecord:Base
belongs_to :worequest
end
class Worequest < ActiveRecord:Base
has_one :status_code do
def closed
where(closed: true)
end
end
end
closed_quests: Worequest.all.closed
我的答案基于这里提出的问题:How do you scope ActiveRecord associations in Rails 3?
这就是我解释你的问题的方式。 对于rails 4,我建议使用另一个答案。