0

我有一个 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'
----

任务控制器.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. @task 在尝试反馈到 quick_create 页面时遇到错误(因为它需要@task 和@tasks,我认为)。

反正....

4

1 回答 1

0

我想您可能有两种选择-

  • 在 URL 中指定一些自定义参数并使用它来决定重定向到的位置
  • 或使用已经建议的不同操作。

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

于 2013-10-16T14:39:55.900 回答