保存一篇简单的博文,创建和更新方法应该是一样的吗?

时间:2010-12-17 02:33:55

标签: ruby-on-rails

为避免重复逻辑,创建和更新操作应该相同吗?

这是一个很好的例子吗?

2 个答案:

答案 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)

虽然createupdate相似,但我认为让它们完全相同是不值得的。通常你会想要每个不同的flash消息。此外,如果验证失败,在create通常最好呈现new操作,而在失败的update上,您更有可能要呈现edit行动。这些微小的差异通常已足够,因此使用单独的创建和新方法更简单,更易读。

我个人会为elsecreate分别提供update条款。他们看起来像:

#create
else
  render :action => "new"
end

#update
else
  render :action => "edit"
end

用户仍然可以看到错误并进行更正,但这样我根本不需要createupdate次观看。

如果您使用save!update_attributes!任何验证错误都会引发异常,您必须在某处进行救援。如果您没有挽救它,那么每次模型无法验证时,您的用户都会收到500错误页面。这就是为什么它更常规地使用非! saveupdate_attributes方法。