Ruby on rails 如何使用命名范围将记录限制为非空记录?

Ruby on rails 如何使用命名范围将记录限制为非空记录?,ruby-on-rails,ruby,named-scope,Ruby On Rails,Ruby,Named Scope,我已经构建了一个RubyonRails应用程序(2.3.9),它允许用户跟踪训练。我试图仅从我的训练表返回在视频链接列中有值的记录。(workout.video_link是一个字符串,包含一个网址) 我以前使用过名为_scope的来限制记录,但仅限于整数列,我不确定如何使用字符串来实现这一点,因为不为NULL显然在这里不起作用 如何在workout.rb中写入作用域来执行此操作?您可以将条件指定为字符串,以检查是否为NULL: class Workout named_scope :with_

我已经构建了一个RubyonRails应用程序(2.3.9),它允许用户跟踪训练。我试图仅从我的
训练
表返回在
视频链接
列中有值的记录。(
workout.video_link
是一个字符串,包含一个网址)

我以前使用过名为_scope的
来限制记录,但仅限于整数列,我不确定如何使用字符串来实现这一点,因为
不为NULL
显然在这里不起作用


如何在
workout.rb
中写入作用域来执行此操作?

您可以将条件指定为字符串,以检查
是否为NULL

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

改进Pan Thomakos的示例:

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

这并不限制人们对记录的思考,因为
锻炼.视频链接
不包含
NULL
。它为空。*已更新,以便您检查是否为非空和!=''。我想在该子句中添加AND video_link NOT NULL条件。字段仍然可能为null,或者为空字符串。但这可能是正确的做法。即使字段为空,上述操作仍然有效。但是,添加
非空
的一个原因可能是为了提高性能-如果许多记录将该字段设置为
,添加它可能会显著提高性能。