如何查找符合条件的任何记录

时间:2012-03-23 04:55:16

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

我在rails(3.1)app上有一个ruby(1.9.3),其中:

应用程序/模型/ list.rb

class List < ActiveRecord::Base
  has_many :tasks
  #...
end

应用程序/模型/ task.rb

class Task < ActiveRecord::Base
  belongs_to :list
  #...
end

我正在尝试遍历List的任务,以搜索是否有任何具有

的任务
task.planned_for.blank? or task.mins.blank?

基本上如果循环找到,我需要有条件地显示一些视图代码。想法?

2 个答案:

答案 0 :(得分:2)

SQL等效于ActiveSupport#blank?是:

column_name IS NULL OR column_name = ''

所以在你的控制器show方法中:

@list = List.find(params[:id])
@tasks = @list.tasks.where("planned_for IS NULL OR planned_for = '' OR mins IS NULL OR mins = ''")
在您看来

<% if @tasks.any? %>
  <% #do some stuff %>
<% else %>
<% end %>

答案 1 :(得分:0)

假设planned_for和mins是实际的Task属性:

List.first.tasks.where('tasks.planned_for IS NULL OR tasks.mins IS NULL')

您还可以在任务:

的范围内使用此条件
scope :my_scope, -> { where('tasks.planned_for IS NULL OR tasks.mins IS NULL') }

所以

List.first.tasks.my_scope

我使用了范围定义中的括号,因为在Rails 4上显然不推荐使用。这是基于NULL而不是#blank,因为我通常会在数据库中推送空字符串。