Ruby on rails 用于筛选表-RoR中显示的结果的查询索引页
我正在尝试筛选待办事项列表的索引页,我的任务表中有列Ruby on rails 用于筛选表-RoR中显示的结果的查询索引页,ruby-on-rails,ruby,forms,parameters,Ruby On Rails,Ruby,Forms,Parameters,我正在尝试筛选待办事项列表的索引页,我的任务表中有列t.datetime“completed\u at” 目前我的表格是这样的 <%= form_with model: @task, method: :GET do |f| %> <%= f.label "Complete" %> <%= f.radio_button :completed, "complete" %> <%= f.label &quo
t.datetime“completed\u at”
目前我的表格是这样的
<%= form_with model: @task, method: :GET do |f| %>
<%= f.label "Complete" %>
<%= f.radio_button :completed, "complete" %>
<%= f.label "Incompleted" %>
<%= f.radio_button :completed, "incomplete" %>
<%= f.label "All tasks" %>
<%= f.radio_button :completed, "all_tasks" %>
<%= f.submit "Filter" %>
<% end %>
我试图使用completed\u at
等于nil是一个不完整的任务,而complete任务将是!当检查为完成时,将存储nil
作为日期时间。如果有人能给我指出正确的方向,或者给我举个例子说明如何使这项工作顺利进行,我将不胜感激。谢谢
轨道-6
ruby-2.7通过对
nil
求反,您将得到true
,这样就不会过滤行中未nil
已完成的任务,而是将行中已完成的任务作为true进行过滤
您可以将@tasks
分配给Task.all
,然后根据参数[:completed]
的值对其进行修改:
def index
completed = params[:completed]
@tasks = Task.all
@tasks = Task.where.not(completed_at: nil) if completed == 'complete'
@tasks = Task.where(completed_at: nil) if completed == 'incomplete'
end
where.not
执行IS not NULL
查询的技巧
或者如果你想更加面向对象
class Tasks
def initialize(completed)
@completed = completed
end
def complete_filter
return Task.where.not(completed_at: nil) if complete?
return Task.where(completed_at: nil) incomplete?
Task.all
end
private
attr_reader :completed
def complete?
completed == 'complete'
end
def incomplete?
completed == 'incomplete'
end
end
def index
@tasks = Tasks.new(params[:completed]).complete_filter
end
第一个例子是正确的,对我有帮助,当我有更多的时间时,我也可以尝试你的第二个建议。谢谢
class Tasks
def initialize(completed)
@completed = completed
end
def complete_filter
return Task.where.not(completed_at: nil) if complete?
return Task.where(completed_at: nil) incomplete?
Task.all
end
private
attr_reader :completed
def complete?
completed == 'complete'
end
def incomplete?
completed == 'incomplete'
end
end
def index
@tasks = Tasks.new(params[:completed]).complete_filter
end