Rails重定向到显示页面而不是在尝试排序时保持索引

时间:2017-04-27 13:53:53

标签: javascript ruby-on-rails ruby sorting

我正在编写一个使用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

提前致谢,

如果没有足够的信息可以继续上传,我很乐意上传。

1 个答案:

答案 0 :(得分:0)

您必须应用indexupdate操作中使用的相同排序方法。因为您在_update.js.erb中呈现的部分将使用该实例变量(而不是index中的变量)。

如果使用AJAX,则没有重定向。

在AJAX调用中执行类似的操作以传递当前的url参数(对于您正在使用的路径更改&#39; /&#39;):

$.ajax({
  type: 'PATCH',
  url: '/' + window.location.search,
  data: {
    ...
  }
})