【问题标题】:How to construct a clickable link with a scope using Ransack and Rails如何使用 Ransack 和 Rails 构建具有范围的可点击链接
【发布时间】:2015-02-18 18:56:03
【问题描述】:

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

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

这是我的模型:

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

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

感谢您的帮助!

【问题讨论】:

    标签: ruby-on-rails ransack


    【解决方案1】:

    我正打算做肮脏的方式。 (但还没有)

    • 为每个范围创建search_form_for(您的案例将有 2 个表单)
    • 使用自己的标准设置隐藏字段(就像您在代码中所做的那样,但每个都以自己的形式)
    • 使提交按钮看起来像链接(用css我觉得不是很难。你可以看到Bootstrap button appeared as link

    不是很干净或优雅。

    【讨论】:

    • 嘿@twnaing 谢谢你的回答。我认为这样做的挑战是它可能会从主 search_form_for 中删除任何过滤。我最终变得更脏,我会在答案中告诉你。
    • 我看错了确实需要保留。对不起@bnussey,谢谢你的回答。
    • 没问题,希望对你有帮助。
    【解决方案2】:

    我通过为每个范围创建隐藏字段然后使用 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 %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-08
      • 2013-06-22
      • 1970-01-01
      • 1970-01-01
      • 2012-02-06
      • 1970-01-01
      • 2011-10-05
      • 1970-01-01
      相关资源
      最近更新 更多