我有自定义控制器操作,用于在网上商店中激活新的客户帐户。我有一个名为customer.rb
的模型。该模型生成密钥并向客户发送激活链接。该链接将路由到customers_controller.rb
并执行以下操作:
def activate_customer
@customer = Customer.find(params[:customer_id])
if @customer.present?
if @customer.activation_key == params[:activation_key]
@customer.activated = true
@customer.save
redirect_to :cart
else
redirect_to :root
end
else
redirect_to :root
end
end
我第一次尝试没有@customer.save
,但记录没有更新。我在@customer.activated = true
之前和之后都提出过,这一切似乎都很好。唯一的问题是记录没有更新。我还检查了一个可能的attar_accessible
问题,但那不是它(我完全关闭了attr_accessible
来检查)。有任何想法吗? Thanx提前!
*修改:已检查@customer.save
的值,返回false
...
*编辑:
问题似乎是客户模型上的密码验证。验证结果如下:
# Validations
validates_presence_of :title, :country, :zipcode, :city, :street, :number, :first name, :lastname
validates :email, :presence => true, :uniqueness => true, :email => true
validates_confirmation_of :password, :unless => :validate?
validates_presence_of :password
有关如何跳过此特定控制器操作的验证的任何想法? Thanx和我一起思考!
答案 0 :(得分:0)
您可以使用条件验证,这是本案例中的最佳做法。
以下是http://railscasts.com/episodes/41-conditional-validations
上的railscast然后你可以使用这样的代码:
attr_accessor :updating_password
validates_confirmation_of :password, :if => should_validate_password?
def should_validate_password?
updating_password
end
如果要跳过验证,则需要将updating_password设置为false。
@customer.updating_password = false
@customer.save