将过滤器和页面参数传递给Rails中的AJAX操作

时间:2014-07-23 19:51:35

标签: ruby-on-rails ajax kaminari ransack

我一直想知道如何解决这个问题 - 但到目前为止它只是让我吸烟。

我使用ransack和kaminari结合ajax创建,更新和删除模式。只有一个索引页面包含一个大的分页条目列表(在我的例子中是问题)。

现在,如果没有过滤器并且没有应用分页,则所有工作都可以。但是,例如,当我切换到第二页并编辑一个条目时,问题列表将刷新第一页内容。当然,任何过滤结果或两者的组合都会发生同样的情况。

以下是来源的一部分:

在before_action中使用的代码用于索引,创建,更新,销毁QuestionsController中的操作:

def find_questions
  @q = Question(params[:q])

  @questions = @q.result(distinct: true).order('created_at DESC').page(params[:p])
end

_save.js.erb partial由create,update和destroy动作呈现:

$("#index").html("<%= escape_javascript(render partial: 'questions_index') %>")

questions_index partial:

-if @questions.empty?
    ...
-else
    -@questions.each do |q|
        [...]
        =link_to t('ui_commands.show'), question_path(q)
        =link_to t('ui_commands.edit'), edit_question_path(q), remote: true
        =link_to t('ui_commands.delete'), delete_question_path(q), remote: true
        [...]           

过滤和分页本身不是&#34; ajaxified&#34; - 它们代表了参数。

我知道我的问题的解决方案但是无法解决它: - (

我知道我必须以某种方式将params(在我的情况下&#34; p&#34;和#34; q&#34;)传递给创建,更新和销毁操作。但我可以这样做吗?

我希望任何人能够为我提供帮助。非常感谢。


编辑: _form partial

中使用的代码
=form_for @question, remote: true do |f|
    [...]
    =f.submit class: 'btn btn-primary'
    [...]

1 个答案:

答案 0 :(得分:1)

您应该能够将当前的params传递给路径助手:

=link_to t('ui_commands.show'), question_path(q, params)

这会将当前查询字符串参数添加到路径的末尾。

如果需要使用哈希调用路径助手,例如:

question_path(id: 6)

您可以合并参数。如果需要,还可以转换查询字符串参数。

question_path(params.merge({ id: 6 }))

question_path(params.merge({ id: 6, p: params[:p] + 1 }))

question_path(q, params.merge({ p: params[:p] - 1 }))

编辑:

回应有关使用资源通过form_for传递参数的编辑,尝试在表单中添加隐藏字段:

=hidden_field_tag :p, params[:p]
=hidden_field_tag :q, params[:q]

http://apidock.com/rails/v3.2.13/ActionView/Helpers/FormTagHelper/hidden_field_tag