2017-10-13 44 views
0

我为用户创建了一个小型售票系统。我有新票,进行中和完成票。我希望能够在页面上切换是否已完成隐藏或显示。做这个的最好方式是什么?保存这些值的参数是ticket.statusRails 4过滤器索引列表与开关

在控制器:

def index 
    @tickets = Ticket.all 

    if params[:filter_by] 
     @tickets = Ticket.where(:category => params[:filter_by]) 
    else 
     @tickets = Ticket.all 
    end 
end 

在索引视图:

<div> 
<div><%= link_to "Full Listing", tickets_path %></div> 
<div><%= link_to "Admin", tickets_path(:filter_by => :Administrative), {:method => :get} %></div> 
<div><%= link_to "Graphics", tickets_path(:filter_by => :Graphics), {:method => :get} %></div> 
<div><%= link_to "IT", tickets_path(:filter_by => :IT), {:method => :get} %></div> ||| 
<div><%= link_to "New entry", new_ticket_path %></div> ||| 
<div> 
    <% if current_user.present? %> 
    <%= link_to " Sign Out", sessions_path, method: :delete %> 
    <% end %> 
</div> 

+0

你能为拨动本身提供的HTML? – AntonTkachov

+0

从查看我正在查看的html代码,输入将是一个复选框。从那开关只是穿衣。 – lostrennie

+0

你能更新你的代码并且包含这个复选框吗? – AntonTkachov

回答

0

你怎么样看看搜查,SimpleForm和SimpleFormRansack?这就是我构建我自己的大部分索引过滤器的方式。

https://github.com/activerecord-hackery/ransack

https://github.com/plataformatec/simple_form

https://github.com/kaspernj/simple_form_ransack

在你的控制器做这样的事情:

def index 
    ransack_params = params[:q] || {} 
    ransack_params[:status_eq_any] ||= ["New"] 

    @ransack = Ticket.ransack(params[:q]) 
    @tickets = @ransack.result 
end 

在你看来,你可以做这样的事情:

<%= simple_search_form_for @ransack do |f| %> 
    <%= f.input :category_eq_any, collection: ["Administrative", "Graphics", "IT"] %> 
    <%= f.input :status_eq_any, collection: ["New", "Completed"] %> 
    <%= f.button :submit %> 
<% end %> 

<% @tickets.each do |ticket| %> 
    ... 
<% end %> 

您还可以显示像这样的链接到预定义搜索:

<%= link_to "Admin", tickets_path(q: {status_eq: "Administrative"}) %> 
+0

这看起来非常有用!快速的问题,我总是希望类别的按钮能够正常工作,但我希望切换到隐藏/显示已完成的票据,并且通过上面给出的设置,它会这样做? – lostrennie