我的模型包含before_create
和before_update
回调,可以return false
。当回调失败时(如预期的那样)不会保存模型,但是我的控制器会重定向到未创建模型的索引路径(而不是渲染新模板)。我的代码是:
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
答案 0 :(得分: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