我有一个 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,我认为)。
反正....