不完整任务失败的Rails模型方法
Posted
技术标签:
【中文标题】不完整任务失败的Rails模型方法【英文标题】:Rails model method for incomplete tasks failing 【发布时间】:2014-10-28 15:50:17 【问题描述】:我的任务模型中有一些方法可以检查任务是否未完成、过期或已完成。逾期和完成的工作很好,但不完整的任务根本不会出现在我的视野中。如果我在 Rails 控制台中运行 Task.incomplete,则会返回未完成的任务。
型号:
class Task < ActiveRecord::Base
belongs_to :agency
validates :name, presence: true
def self.overdue
where("due_at < ? AND completed = ?", Time.zone.now, false)
end
def self.incomplete
where("due_at >= ? AND completed = ?", Time.zone.now, false)
end
def self.completed
where("completed = true")
end
end
查看:
- @current_agency.tasks.incomplete.each do |task|
= form_for task do |f|
%tr
%td
= f.check_box :completed, :class => "taskCheckbox"
%td
= link_to task.name, '/tasks/'+task.id.to_s+'/edit'
%td
= task.due_at.to_date.strftime( "%m-%d-%Y" ) if task.due_at.present?
%td
= task.assigned_to if task.assigned_to.present?
= submit_tag 'Save', class: 'pull-right btn btn-sm btn-primary', :style => 'display:none;'
【问题讨论】:
如果您直接对您的数据库运行查询,您会得到结果吗? 是的,如果我在 rails 控制台中运行这些方法,我会得到正确的结果:[87] pry(main)> Task.incomplete Task Load (0.5ms) SELECT "tasks".* FROM "tasks " WHERE (due_at > '2014-10-28 16:22:05.423169') => [#请将您不完整的方法更改为:
def self.incomplete
where("tasks.completed IS NULL or tasks.completed = false")
end
这样一个任务就完成了 x 或者一个任务是不完整的。当完成为 nil 并且未完成的任务由于 Due_at >= Time.now 时,这可能会起作用。
编辑:添加table_name,添加NULL
【讨论】:
亚历杭德罗,我试过你的建议,但没有运气。我也试过: def self.incomplete where("due_at >= ? AND completed != ?", Time.zone.now, true) end Alejandro,我想通了,问题出在“已完成”属性的值为 nil 的任务上。我进行了迁移以添加默认 => false 以表示已完成,现在可以开始了。感谢您的帮助。 希望对您有所帮助。【参考方案2】:问题在于“已完成”属性的值为 nil 的任务。我运行了一个迁移来为已完成添加一个默认 => false,现在可以开始了。
【讨论】:
以上是关于不完整任务失败的Rails模型方法的主要内容,如果未能解决你的问题,请参考以下文章
rails rake 任务是不是提供对 ActiveRecord 模型的访问?