如何更改值​点击一个按钮就可以创建变量



在我的索引页面上显示数据库中的所有项目。

@projects = Project.all

但我也想有一些按钮,可以改变这个列表。我有办法做到这一点。类似:

def today
@projects = Project.where('date BETWEEN ? AND ?', DateTime.now.beginning_of_day, DateTime.now.end_of_day).all
end
def this_week
@projects = Project.where('date BETWEEN ? AND ?', DateTime.now.beginning_of_day + 1, DateTime.now.end_of_day + 6).all
end

如何将这些方法添加到按钮中,以及单击时更改项目列表的显示?

MVC的快速概述可能会有所帮助。

  • 模型-数据库之上的第一级,控制对象的属性(例如项目有日期(

  • 控制器-模型和视图(以及路线,但将其放在一边(之间的交互

  • 查看-浏览器和控制器之间的交互

您希望在索引视图上有一些"筛选"按钮。点击此按钮将:

  1. 将浏览器带到新的URL

  2. 触发一些javascript来管理当前视图的上下文

让我为以下每个选项指引正确的方向:


选项1A:每个按钮的新视图

你可以这样构造你的控制器:

class ProjectsController < ApplicationController
def index
@projects = Project.all
end
def today
@projects = Project.where('date BETWEEN ? AND ?', DateTime.now.beginning_of_day, DateTime.now.end_of_day).all
end
def this_week
@projects = Project.where('date BETWEEN ? AND ?', DateTime.now.beginning_of_day + 1, DateTime.now.end_of_day + 6).all
end

然后制定匹配的路线:

Rails.application.routes.draw do
...
resources :projects do
get 'today', on: :collection
get 'this_week', on: :collection
end
...

您还需要创建视图:today.html.erbthis_week.html.erb

用户将单击一个按钮并进入projects/todayprojects/this_week视图。


选项1B:允许您的索引处理参数过滤

你可以这样构造你的控制器:

class ProjectsController < ApplicationController
def index
start_date = params[:start] || DateTime.now.beginning_of_day
end_date = params[:end] || DateTime.now.end_of_day
@projects = Project.where('date BETWEEN ? AND ?', start_date, end_date).all
end

然后自定义你的按钮:

<%= button_to 'Today', projects_path() %>
<%= button_to 'This week', projects_path(start: DateTime.now.beginning_of_week, end: DateTime.now.end_of_week) %>
<%= button_to 'This year', projects_path(start: DateTime.now.beginning_of_year, end: DateTime.now.end_of_year) %>

这将使用URL中的参数重新加载Projects#index,如:

"https://example.com/projects/?start=2019-01-01&end=2019-12-31"

您可以访问这些参数来智能地筛选您的项目。


选项2:Javascript&AJAX

这个很复杂。我建议查看一些教程。像这个:

https://www.rubyguides.com/2019/03/rails-ajax/

最新更新