假设我有一个ArtcilesController
,其创建动作如下。
def create
@article = Article.new(params[:article])
respond_to do |format|
if @article.save
format.html { redirect_to(@article, :notice => "Article created") }
format.json { render :show }
else
format.html { render :new }
format.json { render(:json => { :errors => @article.errors }, :status => :not_acceptable) }
end
end
end
同样的行动也可以写成如下:
def create
@article = Article.new(params[:article])
if @article.save
respond_to do |format|
format.html { redirect_to(@article, :notice => "Article created") }
format.json { render :show }
end
else
respond_to do |format|
format.html { render :new }
format.json { render(:json => { :errors => @article.errors }, :status => :not_acceptable) }
end
end
end
请注意,在第一个示例中,在respond_to块内部有一个if else块,第二个,在一个if else块中有两个respond_to块。
我应该比其他人更喜欢吗?如果是的话,有什么原因吗?或者只是选择一种风格并坚持下去?
答案 0 :(得分:3)
仅限样式,但是您只响应一个请求并根据您的模型在控制器中使用路由逻辑。
def create
@article = Article.new(params[:article])
respond_to do |format|
format.html {
@article.save ? redirect_to(@article, :notice => "Article created") : render :new
}
format.json {
@article.save ? render(:show) : render(:json => { :errors => @article.errors }, :status => :not_acceptable)
}
end
end
答案 1 :(得分:0)
respond_with会干掉它。它甚至在验证失败时处理渲染编辑/新表单和错误消息。