在某些情况下创建后控制重定向

时间:2013-10-16 10:10:50

标签: ruby-on-rails ruby controller

我有一个rails应用程序,它有多种创建任务的方法

a)具有大量选项的正常任务新屏幕

b)快速任务创建屏幕,该屏幕具有最小动作,并且只有最小字段以便快速创建。以及行动清单

创建成功后我想要

a)重定向到标准节目表格

b)使用空白快速创建框和列表中的新任务重定向回快速编辑页面。

如果创建失败,我想要验证

a)重定向到突出显示字段的编辑屏幕

b)重定向到快速创建屏幕,突出显示字段,数据仍在那里。

我尝试过编辑create respond_to if.save?但这似乎适用于两种情况下的所有事情。

我有一个轻微的复杂因素,我一般创建任务(没有选择客户端)或作为客户端自动选择的客户端下的嵌套路由,理想情况下我想回到嵌套的路由位置。

我想通过使用if参数来控制响应,该参数可以识别来自

的呼叫
if from quick_create
  if @task.save?
    redirect
  else
    reload table and clear
if from new
  if task.save?

有什么想法吗?

添加当前控制器代码和路由:

routes.rb

get 'tasks/quick_create' => 'tasks#quick_create'
-----
resources :clients do
    match 'tasks/quick_create' => 'tasks#quick_create'
----

tasks_controller.rb

def create
    @task = Task.new(params[:task])
    @task.practice_id = current_user.practice_id
    unless @task.recurring.present?
      @task.build_recurring
    end
    @task.create_recurring_tasks

    if  params[:batch_task] == "Create Task"
      @client = Client.find(params[:client_id])
      @task.build_batch_task(@client)
    end

    respond_to do |format|
      if @task.save
        format.html { redirect_to @task, notice: 'Task was successfully created.' }
        format.json { render json: @task, status: :created, location: @task }
      else
        format.html { render action: "new" }
        format.json { render json: @task.errors, status: :unprocessable_entity }
      end
    end
  end

  def quick_create
    if params[:client_id]
      @client = Client.find(params[:client_id]).tasks
      @tasks = @client.accessible_by(current_ability, :read).order(:due_date)
    else
      @tasks = Task.accessible_by(current_ability, :read).order(:due_date)
    end
    @task = Task.new
    @task.status = "Not Complete"
    #@task.task_files.build
    @task.build_recurring

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @tasks }
    end
  end

我基本上想用像

之类的东西控制响应
if request.path.include? "quick_create"

能够在快速创建时标记错误。似乎有两件事。 1. request.path if语句不起作用 2.尝试反馈到quick_create页面时的@task会发生错误(因为我认为它同时需要@task和@tasks)。

无论如何......

1 个答案:

答案 0 :(得分:0)

我想你可能有两种选择 -

  • 在网址中指定一些自定义参数,并使用它来决定重定向到哪里
  • 或使用已建议的不同操作。

如果您遇到两个不同的创建操作问题,请发布当前控制器代码和您的路线,否则我们无法帮助您。