Rails自定义控制器操作不保存

时间:2012-07-12 09:41:45

标签: ruby-on-rails controller updates

我有自定义控制器操作,用于在网上商店中激活新的客户帐户。我有一个名为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和我一起思考!

1 个答案:

答案 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