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

时间:2011-02-01 03:39:02

标签: ruby-on-rails activerecord named-scope

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

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

Named Scope Diagram

任何帮助都会非常感谢。

2 个答案:

答案 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