0

我分别有任务和请求控制器和模型。request 的新动作取决于路由中包含的 task :id。如果由于验证错误而无法保存请求,我需要能够使用任务 :id 呈现请求控制器的新操作。但是,当下面的代码运行时,我得到一个模板丢失错误。

如何使用任务 :id 作为参数来渲染新模板?

/task/1/request/new


  if !@request.save
     render :template => new_task_request_path(@blog)    # /task/1/request/new
  end

-----> 错误:缺少模板 - 缺少模板 blogs/1/requests/new

4

1 回答 1

3

在您的代码中,new_task_request_path(@blog)生成一个相对 URL。渲染模板时,您需要为其提供模板的路径,而不是相对 URL。

如果没有更多信息,我无法判断您的视图模板将在哪里,但请尝试将create操作中的代码更改为以下内容:

@task = Task.find(params[:id])
@request = @task.requests.new(params[:request])

if !@request.save
  render 'new'
end

@task.id然后,您可以在您的视图中使用访问任务 ID 。

这假设Task有很多Requests,并且这个动作在你的RequestsController. 如果您使用不同的关系,则需要根据需要更新控制器操作代码。同样,如果它是不同的控制器,您应该将模板路径更新为'requests/new'.

于 2012-08-12T05:32:08.293 回答