【发布时间】:2023-03-22 11:44:01
【问题描述】:
假设我正在制作一个像 StackOverflow 这样的问答网站。我有两个资源:问题和答案。我使用的是默认 Rails RESTful 资源路由,因此每个资源都有自己的控制器和创建方法。
在/questions/show 视图中,我希望允许用户提交特定问题的答案。该表单将 POST 到 /answers,该表单将通过调用 create 方法作为请求路由到 AnswersController。
如果创建了答案,我可以简单地重定向回原来的问题。但是,我在处理答案对象上的验证失败时遇到了麻烦。我需要渲染/question/show 视图并显示答案对象的验证错误。我不清楚如何最好地做到这一点。
以下是两个控制器的外观示例 sn-ps。
class AnswersController < ApplicationController
def create
@answer = Answer.new(params[:answer])
if @answer.save
redirect_to @answer.question
else
# What should go here??
end
end
end
class QuestionsController < ApplicationController
def show
@question = Question.find(params[:id])
@answer = Answer.new(:question_id => @question.id)
end
end
AnswersController 的 create 方法的 else 子句应该包含什么?重定向似乎是错误的,因为错误实际上是由同一个请求引起的。调用 render :template => 'questions/show' 之类的东西似乎也是错误的,因为我必须初始化模板所依赖的任何实例变量。
这种调用 GET 以查看表单以创建对象并调用 POST 以实际创建对象的单独操作的样式似乎在单个控制器中运行良好。
如何跨控制器完成?
【问题讨论】:
标签: ruby-on-rails rest resources controller rendering