我正在编写一个使用partials和AJAX的Rails应用程序,允许从索引编辑ActiveRecord条目。
最近,我添加了按各个部分对条目进行排序的功能,在这种特殊情况下,项目编号,编辑器和关联生产者。我使用关于该主题的Railscasts教程完成了这项工作。
排序在大多数情况下都很有用,但是,一旦我更新了一个条目,排序就会恢复到原始状态(在排序之前),如果我再次尝试排序,我将被带到更新的show方法条目。
我怀疑我的控制器没有正确重定向,但我不确定我哪里出错了。
以下是我的控制器的更新方法:
def update
@whp_project=WhpProject.find(params[:id])
@whp_projects=WhpProject.all
@unarchived_projects = ArchiveStatus.find(0).whp_projects.all
@to_archive_projects = ArchiveStatus.find(1).whp_projects.all
editor_query = Editor.find_by initials: whp_project_params[:editor_initials]
unknown_editor = Editor.find_by initials: 'UNK'
get_ceta_id(@whp_project.project_number.to_i)
@user_projects=WhpProject.where(ceta_username: current_user.ceta_username).all
if editor_query != nil
editor_id_assignment = editor_query.id
else
editor_id_assignment = unknown_editor.id
end
@whp_project.editor_id = editor_id_assignment
@whp_project.update(:editor_id => editor_id_assignment)
@whp_project.update(:ceta_username => @ceta_api_cuser)
respond_to do |format|
if @whp_project.update(whp_project_params)
#format.html { redirect_to @whp_project, notice: 'Whp project was successfully updated.' }
#format.json { render :show, status: :ok, location: @whp_project }``
@whp_project.update(:ceta_username => @ceta_api_cuser)
format.js
format.html {redirect_to action: 'index'}
else
#format.html { render :edit }
#format.json { render json: @whp_project.errors, status: :unprocessable_entity }
end
end
end
这是我的_update.js.erb
$("#unarchivedajax").html("<%= escape_javascript(render partial: 'whp_projects/unarchived_projects') %>");
$("#otherunarchivedajax").html("<%= escape_javascript(render partial: 'whp_projects/other_users_unarchived_projects') %>");
$("#toarchiveajax").html("<%= escape_javascript(render partial: 'whp_projects/to_archive_projects', collection: @whp_projects, as: 'whp_project') %>");
$("#todeleteajax").html("<%= escape_javascript(render partial: 'whp_projects/to_restore_projects', collection: @whp_projects, as: 'whp_project') %>");
$("#torestoreajax").html("<%= escape_javascript(render partial: 'whp_projects/to_delete_projects', collection: @whp_projects, as: 'whp_project') %>");
$("#archivedajax").html("<%= escape_javascript(render partial: 'whp_projects/archived_projects', collection: @whp_projects, as: 'whp_project') %>");
我的索引方法如下:
def index
@whp_projects = WhpProject.order(sort_column + " " + sort_direction)
@unarchived_projects = ArchiveStatus.find(0).whp_projects.all
@to_archive_projects = ArchiveStatus.find(1).whp_projects.all
@user_projects=WhpProject.where(ceta_username: current_user.ceta_username).all
@whp_project= WhpProject
end
提前致谢,
如果没有足够的信息可以继续上传,我很乐意上传。
答案 0 :(得分:0)
您必须应用index
中update
操作中使用的相同排序方法。因为您在_update.js.erb
中呈现的部分将使用该实例变量(而不是index
中的变量)。
如果使用AJAX,则没有重定向。
在AJAX调用中执行类似的操作以传递当前的url参数(对于您正在使用的路径更改&#39; /&#39;):
$.ajax({
type: 'PATCH',
url: '/' + window.location.search,
data: {
...
}
})