如何使用 Ransack 和 Rails 构建具有范围的可点击链接 [英] How to construct a clickable link with a scope using Ransack and Rails

查看:32
本文介绍了如何使用 Ransack 和 Rails 构建具有范围的可点击链接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要求在我的应用程序中有一些范围作为可点击的链接.这将允许用户根据需要更改他们看到的数据.使用 Ransack 和它的 ransackable_scopes 功能我非常接近.我确实需要保留 Ransack 在用户单击范围时所做的任何过滤.

我已经让范围工作了,但现在我只需要构建可点击的链接.

这是我的模型:

class Product { where( "status > ?", 100).where(above_revenue_average: true).order('end_date DESC') }范围:向下趋势,->{ where( "status 

现在在我看来,我已将这两个范围添加为隐藏字段,如下所示:

 <%= search_form_for @q, :html =>{:class =>'filter-form'} 做 |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 =>'搜索'%>

<div><%= f.submit "Filter", class: 'btn btn-primary' %><%= link_to "Clear Search", request.path, class:"btn btn-default" %>

<%结束%>

从这里我只需要创建链接,它应该可以工作..最好的方法是什么?

感谢您的帮助!

解决方案

我通过为每个范围创建隐藏字段,然后使用 onclick javascript 创建一个按钮来实现这一点:

<%= f.hidden_​​field :upward_trending %><%= button_tag(:type => 'submit', :class => 'btn btn-primary scope-button up_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>向上<br>趋势<%结束%>

I have the requirement to have some scopes as clickable links in my application. This will allow the user to change the data they are seeing as required. Using Ransack and it's ransackable_scopes functionality I am very close. I do need to retain any filtering Ransack has done when the user clicks the scope.

I've got the scopes working but now I just need to construct the clickable link.

Here's my model:

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

Now in my view I've added these two scopes as hidden fields, like so:

        <%= 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 %>

From here I just need to create the links and it should work.. What is the best way to do this?

Thanks for your help!

解决方案

I achieved this by creating hidden fields for each scope and then creating a button with 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 %>

这篇关于如何使用 Ransack 和 Rails 构建具有范围的可点击链接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆