ActiveRecord:where属性存在的范围

时间:2015-07-06 14:59:33

标签: ruby-on-rails ruby activerecord

我想抓住Blogs所在的title.present? == true。 (Blogs的字符串属性为title)。

class Blog < ActiveRecord::Base
  scope :with_present_titles, -> {where("#{title.present?} == ?", true)} #doesn't work
end

@blogs = Blog.with_present_titles #doesn't work

不确定我在这里做错了什么。

3 个答案:

答案 0 :(得分:3)

要返回包含theCheck.setOnCheckedChangeListener(null); theCheck.setChecked(false); theCheck.setOnCheckedChangeListener(toggleButtonChangeListener); 列中某些值的所有记录,您可以使用以下查询更新范围:

title

这将返回标题栏中包含一些值的所有记录,并留下任何scope :with_present_titles, -> { where("title is not null and title != ''") } 和空标题。

null是rails提供的方法,您不能在数据库查询中简单地使用这些方法。

答案 1 :(得分:1)

只需编写以下范围即可。

scope :with_present_titles, -> { where('title IS NOT ? AND TITLE != ?', nil, '') }

答案 2 :(得分:1)

根据您的导轨版本,您还可以使用where.not(在导轨4中引入)例如

scope :with_present_titles, ->{where.not(title: [nil,'']) }
#Blog.with_present_titles.to_sql
#=> "SELECT [blogs].* 
#    FROM [blogs] 
#    WHERE (NOT (([blogs].[title] = '' OR [blogs].[title] IS NULL)))"