我在rails(3.1)app上有一个ruby(1.9.3),其中:
class List < ActiveRecord::Base
has_many :tasks
#...
end
class Task < ActiveRecord::Base
belongs_to :list
#...
end
我正在尝试遍历List的任务,以搜索是否有任何具有
的任务task.planned_for.blank? or task.mins.blank?
基本上如果循环找到,我需要有条件地显示一些视图代码。想法?
答案 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,因为我通常会在数据库中推送空字符串。