将任务标记为完成

时间:2013-08-18 16:12:36

标签: ruby-on-rails ruby ruby-on-rails-4

简单的待办事项列表应用程序。没有ajax就难以将任务标记为完整。我的方法是在任务模型中创建一个“已完成”的列,它是一个布尔值。然后在控制器中定义完整和不完整的任务并相应地创建路径。这似乎不起作用,我不知道为什么。如果我做错了,有人可以告诉我吗?我愿意接受建议和替代方案。欢呼声。

带范围选项的任务模型。

class Task < ActiveRecord::Base
  validates_presence_of :title
  #validates_presence_of :user_id
  default_scope -> { order('created_at DESC') }
  belongs_to :user
  scope :completed, where(:completed =>true)
  scope :incomplete, where(:completed =>false)
end

路由文件

match '/tasks/complete/:id' => 'tasks#complete', as: 'complete_task', via: :put
match '/tasks/complete/:id' => 'tasks#incomplete', as: 'incomplete_task', via: :delete

任务控制器

  def complete
   @task = current_user.tasks.find(params[:id])
   @task.completed = true
   @task.save
   redirect_to current_user
 end

 def incomplete
  @task = current_user.tasks.find(params[:id])
  @task.completed = false
  @task.save
  redirect_to current_user
end

任务索引查看

<h3>Incompleted tasks</h3>
 <% current_user.tasks.incomplete.each do |task| %>
 <p><%= task.title %>|
 <%= link_to "Done", complete_task_path(task), method: :put %></p>
<% end %>

<h3>Completed tasks</h3>
 <% current_user.tasks.completed.each do |task| %>
 <p><%= task.title %>|
 <%= link_to "Undo", incomplete_task_path(task), method: :delete %></p>
<% end %>

我也在运行rails 4.

1 个答案:

答案 0 :(得分:1)

如此处所写:http://blog.remarkablelabs.com/2012/12/what-s-new-in-active-record-rails-4-countdown-to-2013

通过Rails 4,您必须使用以下语法:

scope :completed, -> { where(completed: true) }
相关问题