在我的情况下,我与params链接并选择params
如果我使用选择@posts
过滤(:per_page)
,然后使用(:pub)
参数过滤一切正常,因为我在链接中使用了params.merge
。
但是现在如果我想使用第一个链接然后选择,它就不起作用,因为我不知道在我的选择中应该在哪里写params.merge
。
来自我的控制器的代码:
def index
@posts = Post
@posts = @posts.published unless params[:pub]
@posts = @posts.where(:published => params[:pub]) if params[:pub]
@posts = @posts.page(params[:page]).per(params[:per_page] || 5)
end
来自视图的代码
<%= select_tag :per_page, options_for_select(%w(1 2 3), params[:per_page].to_i), :onchange => "if(this.value){window.location='?per_page='+this.value;}" %>
<%= link_to "unpubl", params.merge(:pub => :f) %>
<%= link_to "publ", params.merge(:pub => :t) %>
答案 0 :(得分:0)
如果我理解正确,您正在尝试创建某种HTML过滤器以传递给您的控制器吗?
如果是这种情况,您应该使用form
构建HTML过滤器。这样您就不必将选项“合并”到params
哈希中。表格将为您处理。
示例:
<%= form_tag posts_path, method: :get %>
<%= select_tag :per_page, options_for_select(%w(1 2 3), params[:per_page].to_i) %>
<%= check_box_tag 'published', 'true' %>
<%= submit_tag 'Submit' %>
<% end %>
然后在你的控制器中:
params[:published]
params[:per_page]
将保留相应的值。
有关form_tag
here