我在使用命名范围时遇到问题,SQL不是我的强项。
我想返回所有机器,它已经进行了最后的测试失败。
我的机器型号:
has_many :lodged_tests, :dependent => :destroy
has_one :last_test, :class_name => 'LodgedTest', :order => 'created_at DESC'
named_scope :last_test_failed, :joins => :last_test, :conditions => [ "lodged_tests.is_passed = ?", false]
named_scope确实有效,除了它返回任何失败测试的机器。 我需要它来返回只有最近(最后)测试失败的机器。
下面链接到我正在尝试做的快速图表。
任何帮助都会非常感谢。
答案 0 :(得分:0)
您是否尝试过添加1的限制?
named_scope :last_test_failed, :joins => :last_test, :conditions => [ "lodged_tests.is_passed = ?", false], :order => "created_at desc", :limit => 1
答案 1 :(得分:0)
我已经弄清楚如何使用SQL实现所需的结果,而不是像铁路一样,但它完成了工作。
需要在条件中的子选择中包含1的限制。
named_scope :last_test_failed, :conditions => ["(SELECT is_passed FROM lodged_tests WHERE lodged_tests.machine_id = machines.id ORDER BY created_at DESC LIMIT 1) = ?", false]
如果有人知道如何使用rails scope函数进行此查询,我会非常有兴趣看一个例子。
这个相关的S.O.问题让我走上了正确的道路:tricky named scope in RoR