2010-12-17 41 views

回答

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 

除了保存成功/失敗時做什麼之外,您可以從中提取出多少東西。

+0

我應該打電話保存還是保存! – Blankman 2010-12-17 04:07:20

+0

另外,如果更新方法失敗,我應該如何渲染「新」? – Blankman 2010-12-17 04:10:05

+0

@Blankman:在'create'方法中,使用'save'。如果操作失敗,兩個操作中的'save'和'update_attributes'都將返回false;這允許用戶糾正表單中的錯誤,而不是將它們重定向到另一個動作。這也是爲什麼if語句沒有(也不應該是)else的一部分。 – vonconrad 2010-12-17 05:13:10

0

雖然createupdate是類似的,我認爲它不值得使它們字面上相同。通常你會需要不同的閃光消息。另外,如果驗證失敗,則在create上通常最好呈現new動作,而在失敗update上時,則更有可能要呈現edit動作。這些小小的差異通常足以讓分離的創建和新方法更簡單,更具可讀性。

我個人會有createupdate中的每一個else子句。他們看起來像:

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

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

用戶仍然可以看到該錯誤並糾正它,但這樣一來我就根本不需要createupdate意見。

如果您要使用save!update_attributes!任何驗證錯誤都會引發異常,您必須在某處解救出異常。如果您沒有解決問題,那麼您的用戶每次模型驗證失敗時都會收到500個錯誤頁面。這就是爲什麼它更傳統的使用非! saveupdate_attributes方法。

相關問題