我一直想知道如何解决这个问题 - 但到目前为止它只是让我吸烟。
我使用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'
[...]
答案 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