Rails使用select合并params

时间:2012-07-17 23:42:43

标签: ajax ruby-on-rails-3 railscasts html-select

我只是在Sortable Table Columns上看了Ryan Bates的轨道广播教程,经过一些修改后,他的一个后来的视频(Search, Sort, Paginate with AJAX)变得a化了。我认为他的解决方案效果很好,很干净,很容易降级。

但有一个问题是他正在使用表格进行排序功能,而我想使用选择输入

目前我设置了两个选择框,一个用于列,另一个用于搜索方向,以及一个用于启动ajax请求的链接(请参阅下面的屏幕截图)。

Desired functionality

然而Ryan Bates设置了它,因此他为每个可排序列提供了单独的链接,而我只会有一个链接。我想知道是否有人知道如何推断他所拥有的东西并将参数与选择框上的值合并。

这就是我迄今为止所做的......

<table>
        <tr>
            <th>Sort by</th>
            <th>Order</th>
        </tr>
        <tr>
            <td>
                <%= select_tag "sort", options_for_select([["Creation Date", "created_at"], ["File Name", "name"], ["Rating", "rating_average"], ["Downloads", "downloads"]]) %>
            </td>
            <td>
                <%= select_tag "direction", options_for_select([["Descending", "desc"], ["Ascending", "asc"]]) %>
            </td>
            <td>
            <%= link_to "Sort", params.merge(:sort => params[:sort], :direction => params[:direction], :page => nil), :class => "icon" %>           
            </td>
        </tr>
    </table>

如果可能,我不希望仅将功能限制为启用了JavaScript的用户。

1 个答案:

答案 0 :(得分:1)

AFAICS,来自select-tags的params将以与任何其他param几乎相同的方式通过 - 因此合并它们应该以相同的方式工作。唯一的区别是您需要将params[:sort]传递给select-tag。看看你如何传递当前选中的值:

http://apidock.com/rails/ActionView/Helpers/FormTagHelper/select_tag

http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/options_for_select

这表明格式:

<%= select_tag "sort", options_for_select([["Creation Date", "created_at"], ["File Name", "name"], ["Rating", "rating_average"], ["Downloads", "downloads"]], params[:sort]) %>