不完整任务失败的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') => [#... 弄清楚了,问题出在“已完成”属性的值为 nil 的任务上。我进行了迁移以添加默认 => false 以表示已完成,现在可以开始了。感谢您的帮助。 【参考方案1】:

请将您不完整的方法更改为:

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 模型的访问?

Rails 查询关联的模型范围

Rails - 相同的模型/控制器,但不同的视图

Rails - 模型不通过方法保存属性,但如果手动分配(在控制台中)

在 Rails 模型中一起验证日期和时间字段

Rails 4.2:将 Deliver_later 与无表模型一起使用