2011-01-27 84 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使用存在/不存在的@person.errors以确定适当的RESTful反应。

我要理论,因为你依靠使用失败回调来防止保存无效对象,ActiveRecord不会填充@person.errors,这导致ActionController::Responder确定保存成功。

我建议重新写你的Person类使用验证:

class Person 
    before_save :reversify 

    validates :name, :presence => true 

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

感谢丹。对不起,我没有指定上面的例子大大简化了(我实际上正在与支付处理服务集成),但我最终放弃使用`responds_with`并回复到`respond_to`块。干杯。 – 2011-01-28 05:58:02