2010-12-17 4 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

+0

また、更新メソッドが失敗した場合、私は "new"をレンダリングする必要がありますか? – Blankman

+0

@Blankman: 'create'メソッドで' save'を使います。操作が失敗した場合、2つのアクションの 'save'と' update_attributes'は両方ともfalseを返します。これにより、ユーザーは、別のアクションにリダイレクトするのではなく、フォームの間違いを訂正することができます。これはまた、if文に 'else'部分がない(そうすべきではない)理由です。 – vonconrad

0

createupdateは類似していますが、文字通り同じものにすることは意味がありません。通常、それぞれに異なるフラッシュメッセージが必要になります。また、検証に失敗した場合はcreateに、通常はnewアクションをレンダリングするのが最善ですが、失敗した場合はupdateになると、editアクションをレンダリングする可能性が高くなります。これらのわずかな違いは、通常、作成と新規のメソッドを別々にする方が簡単で読みやすいように十分です。

私は個人的にcreateupdateのそれぞれに対してelse句を持っています。ユーザーがまだエラーが表示され、それを修正しますが、この方法は私がすべてでcreateupdateビューを必要としないことができ

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

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

:彼らは次のようになります。

save!またはupdate_attributes!を使用する場合、検証エラーが発生すると例外が発生します。これはどこかで救済する必要があります。レスキューしなかった場合、モデルの検証に失敗するたびに500エラーページが表示されます。だからこそ、より一般的ではない! saveおよびupdate_attributesの方法。

関連する問題