Rails 通过提交解析 Ransack 参数
Rails Parse Ransack parameters with submit
我有一个 Rails 应用程序并使用 ruby 2.3.3.
对于我的表单,我使用 simple_form、Ransack 进行过滤和 will_paginate。
我有 'set_per_page' 下拉菜单,所以用户可以 select 如果想在 table 中看到 20、200 或 200 个帖子。
= form_tag({ action: "index"}, { method: "get", id: "post_index"}) do
=select_tag :per_page, otions_for_select( [20,200,2000], params[:per_page].to_i )
我的javascript是这样的:
$(document).ready(function() {
$("#per_page").change(function() {
$("#post_index").submit();
});
});
因此,当用户更改下拉菜单时,它将再次呈现操作 'index' 并将 per_page 参数设置为 selected 值。到目前为止一切顺利,但是当我提交 Ransack 参数时,参数消失了。
当我用 Ransack 过滤时,URL 是:
http://localhost:3001/posts?q[name_eq]=Foo&q[title_eq]=Bar
当我 select 'per_page' 下拉列表时,我的 URL 将变为:
http://localhost:3001/posts?per_page=200
如何将 Ransack 调用的参数解析为 per_page 调用。所以我会有这样的URL:
http://localhost:3001/posts?q[name_eq]=Foo&q[title_eq]=Bar&per_page=200
编辑:
我试过在这样的隐藏字段中添加 Ransack 参数:
= form_tag({ action: "index"}, { method: "get", id: "post_index"}) do
=select_tag :per_page, otions_for_select( [20,200,2000], params[:per_page].to_i )
=hidden_field_tag :q, params[:q] if params[:q].present?
但这会导致错误:
undefined method `merge' for "#<ActionController::Parameters:0x175c6110>":String
您需要将 hidden_tag 添加到 ransack 表单并更新它的值并在更改时提交
将隐藏标签添加到您的表单:
= semantic_search_form_for(@q) do |f|
...
= f.hidden_field :per_page, value: params[:q][:per_page] || 20
...
将 select 与 per_page 放在任意位置:
= select_tag :per_page, options_for_select(["20", "200", "2000"], params[:q][:per_page])
添加脚本:
javascript:
$('#per_page').on('change', function() {
$('#q_per_page').val(this.value);
$('#search').submit();
});
根据 Michael Malov 的回复,我创建了这个:
我在 Ransack 搜索表单中添加了:
= search_form_for @q do |f|
= f.hidden_field :per_page, value: @per_page
javascript现在是:
$('#per_page').on('change', function() {
$('#q_per_page').val(this.value);
$('#search').submit();
});
下拉菜单现在是:
= form_tag({ action: "index"}, { method: "get", id: "post_index"}) do
=select_tag :per_page, otions_for_select( [20,200,2000], @per_page )
在控制器内部我有:
@per_page = params[:q].present? ? params[:q][:per_page] : 20
我有一个 Rails 应用程序并使用 ruby 2.3.3.
对于我的表单,我使用 simple_form、Ransack 进行过滤和 will_paginate。
我有 'set_per_page' 下拉菜单,所以用户可以 select 如果想在 table 中看到 20、200 或 200 个帖子。
= form_tag({ action: "index"}, { method: "get", id: "post_index"}) do
=select_tag :per_page, otions_for_select( [20,200,2000], params[:per_page].to_i )
我的javascript是这样的:
$(document).ready(function() {
$("#per_page").change(function() {
$("#post_index").submit();
});
});
因此,当用户更改下拉菜单时,它将再次呈现操作 'index' 并将 per_page 参数设置为 selected 值。到目前为止一切顺利,但是当我提交 Ransack 参数时,参数消失了。
当我用 Ransack 过滤时,URL 是:
http://localhost:3001/posts?q[name_eq]=Foo&q[title_eq]=Bar
当我 select 'per_page' 下拉列表时,我的 URL 将变为:
http://localhost:3001/posts?per_page=200
如何将 Ransack 调用的参数解析为 per_page 调用。所以我会有这样的URL:
http://localhost:3001/posts?q[name_eq]=Foo&q[title_eq]=Bar&per_page=200
编辑:
我试过在这样的隐藏字段中添加 Ransack 参数:
= form_tag({ action: "index"}, { method: "get", id: "post_index"}) do
=select_tag :per_page, otions_for_select( [20,200,2000], params[:per_page].to_i )
=hidden_field_tag :q, params[:q] if params[:q].present?
但这会导致错误:
undefined method `merge' for "#<ActionController::Parameters:0x175c6110>":String
您需要将 hidden_tag 添加到 ransack 表单并更新它的值并在更改时提交
将隐藏标签添加到您的表单:
= semantic_search_form_for(@q) do |f|
...
= f.hidden_field :per_page, value: params[:q][:per_page] || 20
...
将 select 与 per_page 放在任意位置:
= select_tag :per_page, options_for_select(["20", "200", "2000"], params[:q][:per_page])
添加脚本:
javascript:
$('#per_page').on('change', function() {
$('#q_per_page').val(this.value);
$('#search').submit();
});
根据 Michael Malov 的回复,我创建了这个:
我在 Ransack 搜索表单中添加了:
= search_form_for @q do |f|
= f.hidden_field :per_page, value: @per_page
javascript现在是:
$('#per_page').on('change', function() {
$('#q_per_page').val(this.value);
$('#search').submit();
});
下拉菜单现在是:
= form_tag({ action: "index"}, { method: "get", id: "post_index"}) do
=select_tag :per_page, otions_for_select( [20,200,2000], @per_page )
在控制器内部我有:
@per_page = params[:q].present? ? params[:q][:per_page] : 20