使用以下控制器获得资源Foobar
:
class FoobarController < ApplicationController
def new
@foobar = Foobar.new(baz: params[:baz])
@foobar.build_data
end
def create
@foobar = Foobar.new(foobar_params)
respond_with(@foobar)
end
# ...
end
是否有必要在@foobar
方法中设置实例变量#create
?我不能写
def create
Foobar.new(foobar_params).tap &method(:respond_with)
end
答案 0 :(得分:2)
这取决于您回复的内容类型。 {{3}}准确描述了致电respond_with
时会发生什么。在您的情况下,在create
操作中,respond_with
与以下内容相同,假设您未在控制器的respond_to
调用中指定除html之外的任何其他格式:
respond_to do |format|
if @foobar.save
flash[:notice] = 'Foobar was successfully created.'
format.html { redirect_to(@foobar) }
else
format.html { render action: "new" }
end
end
唯一需要@foobar
实例变量的情况是,如果存在验证错误且您的new.html
模板包含@foobar
。如果foobar_params
始终有效,则respond_with
将始终以show
操作的重定向进行响应,因此不需要实例变量。