如何使用 Ransack 和 Rails 构建具有范围的可点击 link
How to construct a clickable link with a scope using Ransack and Rails
我需要在我的应用程序中将某些范围设置为可点击 link。这将允许用户根据需要更改他们看到的数据。使用 Ransack 及其 ransackable_scopes 功能我非常接近。当用户单击范围时,我确实需要保留 Ransack 完成的任何过滤。
我已经让示波器正常工作,但现在我只需要构建可点击的 link。
这是我的模型:
class Product < ActiveRecord::Base
scope :upward_trending, -> { where( "status > ?", 100).where(above_revenue_average: true).order('end_date DESC') }
scope :downward_trending, -> { where( "status < ?", 100).order('end_date DESC') }
def self.ransackable_scopes(auth_object = nil)
[:upward_trending, :downward_trending]
end
end
现在在我看来我已经将这两个范围添加为隐藏字段,如下所示:
<%= search_form_for @q, :html => {:class => 'filter-form'} do |f| %>
<div>
<%= f.hidden_field :upward_trending %>
<%= f.hidden_field :downward_trending %>
<%= f.label :name_cont, "Search", class: 'label' %>
<%= f.search_field :name_cont, class: 'form-control input-box', :placeholder => 'Search' %>
</div>
<div>
<%= f.submit "Filter", class: 'btn btn-primary' %>
<%= link_to "Clear Search", request.path, class:"btn btn-default" %>
</div>
<% end %>
从这里开始,我只需要创建 links,它应该可以工作。执行此操作的最佳方法是什么?
感谢您的帮助!
我正打算做一些肮脏的事情。 (但还没有)
- 为每个范围创建
search_form_for
(您的案例将有 2 个表格)
- 使用自己的标准设置隐藏字段(就像您在代码中所做的那样,但每个都有自己的形式)
- 让提交按钮看起来像link(加上css我觉得不是很难。你可以看看Bootstrap button appeared as link)
不是很干净或优雅。
我通过为每个范围创建隐藏字段然后使用 onclick 创建按钮来实现此目的 javascript:
<%= f.hidden_field :upward_trending %>
<%= button_tag(:type => 'submit', :class => 'btn btn-primary scope-button upward_trending', :id => "upward_trending", :onclick => "document.getElementById('q_downward_trending').value = 0; document.getElementById('q_upward_trending').value = 1;") do %>
<i class="fa fa-chevron-up fa-2x"></i><br>Upward<br>Trending
<% end %>
我需要在我的应用程序中将某些范围设置为可点击 link。这将允许用户根据需要更改他们看到的数据。使用 Ransack 及其 ransackable_scopes 功能我非常接近。当用户单击范围时,我确实需要保留 Ransack 完成的任何过滤。
我已经让示波器正常工作,但现在我只需要构建可点击的 link。
这是我的模型:
class Product < ActiveRecord::Base
scope :upward_trending, -> { where( "status > ?", 100).where(above_revenue_average: true).order('end_date DESC') }
scope :downward_trending, -> { where( "status < ?", 100).order('end_date DESC') }
def self.ransackable_scopes(auth_object = nil)
[:upward_trending, :downward_trending]
end
end
现在在我看来我已经将这两个范围添加为隐藏字段,如下所示:
<%= search_form_for @q, :html => {:class => 'filter-form'} do |f| %>
<div>
<%= f.hidden_field :upward_trending %>
<%= f.hidden_field :downward_trending %>
<%= f.label :name_cont, "Search", class: 'label' %>
<%= f.search_field :name_cont, class: 'form-control input-box', :placeholder => 'Search' %>
</div>
<div>
<%= f.submit "Filter", class: 'btn btn-primary' %>
<%= link_to "Clear Search", request.path, class:"btn btn-default" %>
</div>
<% end %>
从这里开始,我只需要创建 links,它应该可以工作。执行此操作的最佳方法是什么?
感谢您的帮助!
我正打算做一些肮脏的事情。 (但还没有)
- 为每个范围创建
search_form_for
(您的案例将有 2 个表格) - 使用自己的标准设置隐藏字段(就像您在代码中所做的那样,但每个都有自己的形式)
- 让提交按钮看起来像link(加上css我觉得不是很难。你可以看看Bootstrap button appeared as link)
不是很干净或优雅。
我通过为每个范围创建隐藏字段然后使用 onclick 创建按钮来实现此目的 javascript:
<%= f.hidden_field :upward_trending %>
<%= button_tag(:type => 'submit', :class => 'btn btn-primary scope-button upward_trending', :id => "upward_trending", :onclick => "document.getElementById('q_downward_trending').value = 0; document.getElementById('q_upward_trending').value = 1;") do %>
<i class="fa fa-chevron-up fa-2x"></i><br>Upward<br>Trending
<% end %>