命名范围仅搜索连接表的第一个结果

我在使用命名范围时遇到问题,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确实有效,除了它返回任何失败测试的机器。 我需要它来返回只有最近(最后)测试失败的机器。

下面链接到我正在尝试做的快速图表。

命名范围图

任何帮助都会非常感谢。

您是否尝试过添加1的限制?

 named_scope :last_test_failed, :joins => :last_test, :conditions => [ "lodged_tests.is_passed = ?", false], :order => "created_at desc", :limit => 1 

我已经弄清楚如何使用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函数进行此查询,我会非常有兴趣看一个例子。

这个相关的SO问题让我走上正确的道路: RoR中棘手的命名范围