【问题标题】:How do I use a named_scope to limit records to those which are not blank?如何使用 named_scope 将记录限制为非空白记录?
【发布时间】:2011-03-08 20:20:04
【问题描述】:

我已经构建了一个 Ruby on Rails 应用程序 (2.3.9),它允许用户跟踪锻炼。我试图只从我的Workout 表中返回在video_link 列中有值的记录。 (workout.video_link 是一个字符串,包含一个网址)。

我之前使用named_scope 来限制记录,但仅限于整数列,我不确定如何使用字符串来执行此操作,因为IS NOT NULL 显然在这里不起作用。

我将如何在workout.rb 中编写范围来做这样的事情?

【问题讨论】:

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


    【解决方案1】:

    您可以将条件指定为字符串以检查IS NOT NULL

    class Workout
      named_scope :with_link, :conditions => "video_link IS NOT NULL AND video_link != ''"
    end
    

    【讨论】:

    • 这不会限制考虑的记录,因为workout.video_link 不包含NULL。它是空白的。
    • *已更新,以便您检查 not NULL 和 != ''。
    【解决方案2】:

    改进 Pan Thomakos 的示例:

    class Workout
      named_scope :with_link, :conditions => 'LENGTH(TRIM(video_link)) > 0'
    end
    

    【讨论】:

    • 我会在子句中添加 AND video_link IS NOT NULL 条件。该字段仍有可能为空,或者为空字符串。但这可能是要走的路。
    • 即使该字段为NULL,上述仍然有效。但是,添加 IS NOT NULL 的一个原因可能是提高性能 - 如果许多记录的该字段为 NULL,则添加它可能会显着提高性能。
    猜你喜欢
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多