为避免重复逻辑,创建和更新操作应该相同吗?
这是一个很好的例子吗?
答案 0 :(得分:1)
create
方法负责创建简单的博客文章,而update
方法负责更新它。
def create
@blog = Blog.new(params[:blog])
if @blog.save
flash[:notice] = "Saved!"
redirect_to @blog
end
end
def update
@blog = Blog.find(params[:id])
if @blog.update_attributes(params[:blog])
flash[:notice] = "Saved!"
redirect_to @blog
end
end
除了保存成功/失败之外该做什么,你还可以提取出来。
答案 1 :(得分:0)
虽然create
和update
相似,但我认为让它们完全相同是不值得的。通常你会想要每个不同的flash消息。此外,如果验证失败,在create
通常最好呈现new
操作,而在失败的update
上,您更有可能要呈现edit
行动。这些微小的差异通常已足够,因此使用单独的创建和新方法更简单,更易读。
我个人会为else
和create
分别提供update
条款。他们看起来像:
#create
else
render :action => "new"
end
#update
else
render :action => "edit"
end
用户仍然可以看到错误并进行更正,但这样我根本不需要create
和update
次观看。
如果您使用save!
或update_attributes!
任何验证错误都会引发异常,您必须在某处进行救援。如果您没有挽救它,那么每次模型无法验证时,您的用户都会收到500错误页面。这就是为什么它更常规地使用非! save
和update_attributes
方法。