2011-01-27 25 views
0

before_createbefore_updateというコールバックを持つモデルがあります。return falseです。コールバックが失敗したとき(期待どおり)モデルは保存されませんが、コントローラはモデルのインデックスパスにリダイレクトされます(新しいテンプレートのレンダリングではなく)。私のコードは次のとおりです。Railsで `respond_with`を理解する

class Person 
    before_create :reversify 
    before_update :reversify 

    def reversify 
    return false if self.name.blank? 
    self.name = self.name.reverse 
    end 
end 

class PeopleController < ApplicationController 

    respond_to :html 

    def new 
    @person = Person.new 
    respond_with(@person) 
    end 

    def create 
    @person = Person.create(params[:person]) 
    respond_with(@person) 
    end 

end 

答えて

2

respond_withが適切なRESTfulな応答を決定するために@person.errorsの存在/不在を使用しています。

無効なオブジェクトの保存を防ぐために失敗したコールバックを使用しているため、ActiveRecordには@person.errorsが設定されていないため、保存が成功したと判断するが発生することを理論化します。

私が検証使用するようにPersonクラスを再書き込みすることをお勧め:

class Person 
    before_save :reversify 

    validates :name, :presence => true 

    def reversify  
    self.name.reverse! 
    end 
end 
+0

おかげでダン。申し訳ありませんが、私は上記の例を指定することができませんでした(私は実際に支払い処理サービスと統合しています)。しかし、私は 'responds_with'の使用を中止し、' respond_to'ブロックに戻しました。乾杯。 –

関連する問題