我有一个日期范围的仪表板,用户可以在活动中搜索所需的时间段。
我使用同一Dasboard管理不同的模型
例如,我要查找:
我有代表模型的按钮,单击它们会渲染相应的局部。
我可以搜索日期范围,但是在这种情况下,如果我点击下一个按钮 users ,则该日期范围仅适用于前一部分销售第一部分销售
这是因为默认情况下,仪表板操作显示会呈现 sales 。我需要一些东西来呈现当前的活动按钮...
您能帮我找个办法吗?
在一些代码下面:
dashboard.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
dashboards_controller.rb
中的显示动作 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
此表单和按钮位于仪表板 show.html.erb
<%= 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 %>
更新
答案 0 :(得分:2)
我认为这是因为dashboard__params[:button]
始终是nil
。因为在您的搜索表单中,没有input
设置为name
的{{1}}字段。如果您在考虑button
,它不在html表单之内。
因此方法<%= link_to admin_dashboard_url(button: button) do %>
返回set_button
。
因此,nil
操作的第一行始终返回show
,因为如果:sales
返回nil,则这是默认值。
我建议您在搜索表单中添加一个set_button
字段。然后使用javascript阻止默认的表单提交行为,将hidden input
字段的值设置为适当的值(hidden input
或sales
),然后使用javascript提交表单。
show.html.erb
user
现在在提交搜索表单之前使用javascript,设置hidden_filed的值。
show.html.erb
<%= 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 %>
javascript(假设您有jQuery)
<%= link_to '#', id: "#{button}_click", class: 'model_link' do %>
<%= button.capitalize %>
<% end %>