Ruby on rails 搜索具有日期范围的对象
我有一个带有日期范围的仪表板,用户可以在activy中搜索他想要的时间段 我用同一个仪表板管理不同的型号 例如,我想找到:Ruby on rails 搜索具有日期范围的对象,ruby-on-rails,Ruby On Rails,我有一个带有日期范围的仪表板,用户可以在activy中搜索他想要的时间段 我用同一个仪表板管理不同的型号 例如,我想找到: 用户注册的日期范围为 日期范围内的销售额 等等 我有代表模型的按钮,单击它们可以渲染相应的部分 我可以搜索日期范围,但它仅适用于第一部分销售在这种情况下,如果我单击下一步按钮,即用户第一部分销售 这是因为仪表板操作显示在默认情况下呈现sales我需要一些东西来呈现当前活动按钮 你能帮我找到怎么做吗 下面是一些代码: 仪表板.rb class Dashboard at
- 用户注册的日期范围为
- 日期范围内的销售额
- 等等李>
class Dashboard
attr_reader :date_from, :date_to
def initialize(params)
params ||= {}
@date_from = parsed_date(params[:date_from],Time.now.beginning_of_month.to_date.to_s)
@date_to = parsed_date(params[:date_to], (Date.today + 1).to_s)
end
def article_date_range
Article.where('created_at BETWEEN ? AND ?', @date_from, @date_to)
end
private
def parsed_date(date_string, default)
Date.parse(date_string)
rescue ArgumentError, TypeError
default
end
end
def show
@button ||= set_button || :sales
@dashboard = Dashboard.new(params[:search])
@articles = @dashboard.article_date_range
@articles = @articles.order('created_at ASC')
end
private
def set_button
button = dashboard__params[:button]&.to_sym and [:sales, :users].include?(button) and button
end
<%= form_tag admin_dashboard_path, method: :get do %>
<%= text_field_tag "search[date_from]", @dashboard.date_from, class: "datepicker" %>
<%= text_field_tag "search[date_to]", @dashboard.date_to, class: "datepicker" %>
<%= submit_tag "Rechercher", class: "btn btn-main" %>
<% end %>
#the buttons that "redirect" to the appropriated partial
<% [:sales, :users, :articles].each do |button| %>
<li class="tabs list-inline-item <%= params[:button] == button.to_s ? "tabs__item--active" : "tabs__item--inactive" %>">
<%= link_to admin_dashboard_url(button: button) do %>
<%= button.capitalize %>
<% end %>
</li>
<% end %>
<%= form_tag admin_dashboard_path, method: :get do %>
<%= text_field_tag "search[date_from]", @dashboard.date_from, class: "datepicker" %>
<%= text_field_tag "search[date_to]", @dashboard.date_to, class: "datepicker" %>
<%= hidden_field_tag 'button', 'sales', id: 'button' %>
<%= submit_tag "Rechercher", class: "btn btn-main" %>
<% end %>
#the buttons that "redirect" to the appropriated partial
<% [:sales, :users, :articles].each do |button| %>
<li class="tabs list-inline-item <%= params[:button] == button.to_s ? "tabs__item--active" : "tabs__item--inactive" %>">
<%= link_to admin_dashboard_url(button: button) id: "#{button}_click" do %>
<%= button.capitalize %>
<% end %>
</li>
<% end %>
<%= link_to '#', id: "#{button}_click", class: 'model_link' do %>
<%= button.capitalize %>
<% end %>
在仪表板\u controller.rb中显示操作
class Dashboard
attr_reader :date_from, :date_to
def initialize(params)
params ||= {}
@date_from = parsed_date(params[:date_from],Time.now.beginning_of_month.to_date.to_s)
@date_to = parsed_date(params[:date_to], (Date.today + 1).to_s)
end
def article_date_range
Article.where('created_at BETWEEN ? AND ?', @date_from, @date_to)
end
private
def parsed_date(date_string, default)
Date.parse(date_string)
rescue ArgumentError, TypeError
default
end
end
def show
@button ||= set_button || :sales
@dashboard = Dashboard.new(params[:search])
@articles = @dashboard.article_date_range
@articles = @articles.order('created_at ASC')
end
private
def set_button
button = dashboard__params[:button]&.to_sym and [:sales, :users].include?(button) and button
end
<%= form_tag admin_dashboard_path, method: :get do %>
<%= text_field_tag "search[date_from]", @dashboard.date_from, class: "datepicker" %>
<%= text_field_tag "search[date_to]", @dashboard.date_to, class: "datepicker" %>
<%= submit_tag "Rechercher", class: "btn btn-main" %>
<% end %>
#the buttons that "redirect" to the appropriated partial
<% [:sales, :users, :articles].each do |button| %>
<li class="tabs list-inline-item <%= params[:button] == button.to_s ? "tabs__item--active" : "tabs__item--inactive" %>">
<%= link_to admin_dashboard_url(button: button) do %>
<%= button.capitalize %>
<% end %>
</li>
<% end %>
<%= form_tag admin_dashboard_path, method: :get do %>
<%= text_field_tag "search[date_from]", @dashboard.date_from, class: "datepicker" %>
<%= text_field_tag "search[date_to]", @dashboard.date_to, class: "datepicker" %>
<%= hidden_field_tag 'button', 'sales', id: 'button' %>
<%= submit_tag "Rechercher", class: "btn btn-main" %>
<% end %>
#the buttons that "redirect" to the appropriated partial
<% [:sales, :users, :articles].each do |button| %>
<li class="tabs list-inline-item <%= params[:button] == button.to_s ? "tabs__item--active" : "tabs__item--inactive" %>">
<%= link_to admin_dashboard_url(button: button) id: "#{button}_click" do %>
<%= button.capitalize %>
<% end %>
</li>
<% end %>
<%= link_to '#', id: "#{button}_click", class: 'model_link' do %>
<%= button.capitalize %>
<% end %>
此表单和按钮位于仪表板show.html.erb
class Dashboard
attr_reader :date_from, :date_to
def initialize(params)
params ||= {}
@date_from = parsed_date(params[:date_from],Time.now.beginning_of_month.to_date.to_s)
@date_to = parsed_date(params[:date_to], (Date.today + 1).to_s)
end
def article_date_range
Article.where('created_at BETWEEN ? AND ?', @date_from, @date_to)
end
private
def parsed_date(date_string, default)
Date.parse(date_string)
rescue ArgumentError, TypeError
default
end
end
def show
@button ||= set_button || :sales
@dashboard = Dashboard.new(params[:search])
@articles = @dashboard.article_date_range
@articles = @articles.order('created_at ASC')
end
private
def set_button
button = dashboard__params[:button]&.to_sym and [:sales, :users].include?(button) and button
end
<%= form_tag admin_dashboard_path, method: :get do %>
<%= text_field_tag "search[date_from]", @dashboard.date_from, class: "datepicker" %>
<%= text_field_tag "search[date_to]", @dashboard.date_to, class: "datepicker" %>
<%= submit_tag "Rechercher", class: "btn btn-main" %>
<% end %>
#the buttons that "redirect" to the appropriated partial
<% [:sales, :users, :articles].each do |button| %>
<li class="tabs list-inline-item <%= params[:button] == button.to_s ? "tabs__item--active" : "tabs__item--inactive" %>">
<%= link_to admin_dashboard_url(button: button) do %>
<%= button.capitalize %>
<% end %>
</li>
<% end %>
<%= form_tag admin_dashboard_path, method: :get do %>
<%= text_field_tag "search[date_from]", @dashboard.date_from, class: "datepicker" %>
<%= text_field_tag "search[date_to]", @dashboard.date_to, class: "datepicker" %>
<%= hidden_field_tag 'button', 'sales', id: 'button' %>
<%= submit_tag "Rechercher", class: "btn btn-main" %>
<% end %>
#the buttons that "redirect" to the appropriated partial
<% [:sales, :users, :articles].each do |button| %>
<li class="tabs list-inline-item <%= params[:button] == button.to_s ? "tabs__item--active" : "tabs__item--inactive" %>">
<%= link_to admin_dashboard_url(button: button) id: "#{button}_click" do %>
<%= button.capitalize %>
<% end %>
</li>
<% end %>
<%= link_to '#', id: "#{button}_click", class: 'model_link' do %>
<%= button.capitalize %>
<% end %>
#“重定向”到相应部分的按钮
更新
其思想是用户选择一个日期范围,然后单击按钮,查看商品销售和用户在所选日期范围内的活动(无需再次选择日期范围)
我想这是因为,
dashboard\uu参数[:button]
总是nil
。因为在搜索表单中,没有输入
字段将名称
设置为按钮
。如果您考虑的是
,那么它就在html表单之外
所以方法set_按钮
返回nil
因此,show
操作的第一行始终返回:sales
,因为如果set\u按钮返回nil,这是默认值
我建议在搜索表单中添加一个隐藏输入
字段。然后使用javascript阻止默认表单提交行为,将隐藏输入
字段的值设置为适当的值(sales
或user
),然后使用javascript提交表单
更新1
show.html.erb
class Dashboard
attr_reader :date_from, :date_to
def initialize(params)
params ||= {}
@date_from = parsed_date(params[:date_from],Time.now.beginning_of_month.to_date.to_s)
@date_to = parsed_date(params[:date_to], (Date.today + 1).to_s)
end
def article_date_range
Article.where('created_at BETWEEN ? AND ?', @date_from, @date_to)
end
private
def parsed_date(date_string, default)
Date.parse(date_string)
rescue ArgumentError, TypeError
default
end
end
def show
@button ||= set_button || :sales
@dashboard = Dashboard.new(params[:search])
@articles = @dashboard.article_date_range
@articles = @articles.order('created_at ASC')
end
private
def set_button
button = dashboard__params[:button]&.to_sym and [:sales, :users].include?(button) and button
end
<%= form_tag admin_dashboard_path, method: :get do %>
<%= text_field_tag "search[date_from]", @dashboard.date_from, class: "datepicker" %>
<%= text_field_tag "search[date_to]", @dashboard.date_to, class: "datepicker" %>
<%= submit_tag "Rechercher", class: "btn btn-main" %>
<% end %>
#the buttons that "redirect" to the appropriated partial
<% [:sales, :users, :articles].each do |button| %>
<li class="tabs list-inline-item <%= params[:button] == button.to_s ? "tabs__item--active" : "tabs__item--inactive" %>">
<%= link_to admin_dashboard_url(button: button) do %>
<%= button.capitalize %>
<% end %>
</li>
<% end %>
<%= form_tag admin_dashboard_path, method: :get do %>
<%= text_field_tag "search[date_from]", @dashboard.date_from, class: "datepicker" %>
<%= text_field_tag "search[date_to]", @dashboard.date_to, class: "datepicker" %>
<%= hidden_field_tag 'button', 'sales', id: 'button' %>
<%= submit_tag "Rechercher", class: "btn btn-main" %>
<% end %>
#the buttons that "redirect" to the appropriated partial
<% [:sales, :users, :articles].each do |button| %>
<li class="tabs list-inline-item <%= params[:button] == button.to_s ? "tabs__item--active" : "tabs__item--inactive" %>">
<%= link_to admin_dashboard_url(button: button) id: "#{button}_click" do %>
<%= button.capitalize %>
<% end %>
</li>
<% end %>
<%= link_to '#', id: "#{button}_click", class: 'model_link' do %>
<%= button.capitalize %>
<% end %>
我想这是因为,dashboard\uu参数[:button]
总是nil
。因为在搜索表单中,没有输入
字段将名称
设置为按钮
。如果您考虑的是
,那么它就在html表单之外
所以方法set_按钮
返回nil
因此,show
操作的第一行始终返回:sales
,因为如果set\u按钮返回nil,这是默认值
我建议在搜索表单中添加一个隐藏输入
字段。然后使用javascript阻止默认表单提交行为,将隐藏输入
字段的值设置为适当的值(sales
或user
),然后使用javascript提交表单
更新1
show.html.erb
class Dashboard
attr_reader :date_from, :date_to
def initialize(params)
params ||= {}
@date_from = parsed_date(params[:date_from],Time.now.beginning_of_month.to_date.to_s)
@date_to = parsed_date(params[:date_to], (Date.today + 1).to_s)
end
def article_date_range
Article.where('created_at BETWEEN ? AND ?', @date_from, @date_to)
end
private
def parsed_date(date_string, default)
Date.parse(date_string)
rescue ArgumentError, TypeError
default
end
end
def show
@button ||= set_button || :sales
@dashboard = Dashboard.new(params[:search])
@articles = @dashboard.article_date_range
@articles = @articles.order('created_at ASC')
end
private
def set_button
button = dashboard__params[:button]&.to_sym and [:sales, :users].include?(button) and button
end
<%= form_tag admin_dashboard_path, method: :get do %>
<%= text_field_tag "search[date_from]", @dashboard.date_from, class: "datepicker" %>
<%= text_field_tag "search[date_to]", @dashboard.date_to, class: "datepicker" %>
<%= submit_tag "Rechercher", class: "btn btn-main" %>
<% end %>
#the buttons that "redirect" to the appropriated partial
<% [:sales, :users, :articles].each do |button| %>
<li class="tabs list-inline-item <%= params[:button] == button.to_s ? "tabs__item--active" : "tabs__item--inactive" %>">
<%= link_to admin_dashboard_url(button: button) do %>
<%= button.capitalize %>
<% end %>
</li>
<% end %>
<%= form_tag admin_dashboard_path, method: :get do %>
<%= text_field_tag "search[date_from]", @dashboard.date_from, class: "datepicker" %>
<%= text_field_tag "search[date_to]", @dashboard.date_to, class: "datepicker" %>
<%= hidden_field_tag 'button', 'sales', id: 'button' %>
<%= submit_tag "Rechercher", class: "btn btn-main" %>
<% end %>
#the buttons that "redirect" to the appropriated partial
<% [:sales, :users, :articles].each do |button| %>
<li class="tabs list-inline-item <%= params[:button] == button.to_s ? "tabs__item--active" : "tabs__item--inactive" %>">
<%= link_to admin_dashboard_url(button: button) id: "#{button}_click" do %>
<%= button.capitalize %>
<% end %>
</li>
<% end %>
<%= link_to '#', id: "#{button}_click", class: 'model_link' do %>
<%= button.capitalize %>
<% end %>
请注意,可以使用搜索工具搜索范围<代码>位置(创建于:@date\u from..@date\u to)
是,我在其他地方使用它;)您是否尝试过类似的方法:@button | |=(set | button | |:sales)
?是的,但这不会改变任何内容。请注意,可以使用搜索工具搜索范围<代码>位置(创建于:@date\u from..@date\u to)
是,我在其他地方使用它;)您是否尝试过类似的方法:@button | |=(set | button | |:sales)
?是的,但这不会改变任何事情谢谢您@mehedi,我会尝试一下,根据这个建议,我需要为每个模型创建一个表单?实际上,我只需要一个表单。@johan我已经更新了我的答案,显示了如何修改yourshow
视图。只有一件事,你是重定向到一个部分还是渲染一个部分?因为从技术上讲,我认为你不能重定向到一个部分,你只能重定向到一个视图。我不习惯使用javascript,我应该编写一个事件侦听器?@johan是用户先提交搜索表单,然后单击链接到管理员仪表板的url(按钮:button)。因为我看到搜索表单中已经有一个提交按钮
Thank you@mehedi,所以我会试试这个,建议我需要为每个模型创建一个表单?实际上,我只需要一个表单。@johan我已经更新了我的答案,显示了如何修改yourshow
视图。只有一件事,你是重定向到一个部分还是渲染一个部分?因为从技术上讲,我认为你不能重定向到一个部分,你只能重定向到一个视图。我不习惯使用javascript,我应该编写一个事件侦听器?@johan是用户先提交搜索表单,然后单击链接到管理员仪表板的url(按钮:button)。因为我看到搜索表单中已经有一个提交按钮