【问题标题】:Validation for a certain action in ruby on rails验证 ruby​​ on rails 中的某个操作
【发布时间】:2012-09-06 11:59:31
【问题描述】:

在我当前的 ROR 项目中,我使用设计连接进行验证。在我的更改密码表单验证中,我在 user 模型中使用以下代码

validates_presence_of :password, :password_confirmation

但我想验证只是为了一个动作。我的用户控制器中有一个名为update_password 的函数。我发现我可以按如下方式分配操作:

validates_presence_of :password, :password_confirmation, :on => :update_password

但它不起作用。即使密码和密码确认字段为空,也会提交表单。谁能帮我解决如何仅为特定操作设置验证。会有很大帮助

非常感谢

【问题讨论】:

  • :on 选项接受值 :create:update,而不是 :update_password
  • 那么我该如何设置update_password
  • :on 选项不适用于“控制器上下文”,而是“对模型的操作”。您可以设置实例变量以从控制器设置上下文,并使用:if 选项对其进行测试

标签: ruby-on-rails ruby-on-rails-3 devise passwords


【解决方案1】:

您可以使用设计中实现的 :validatable 选项。 只需添加到您的模型中

devise :validatable

并在您的config/initializers/devise.rb 文件中设置验证选项

# ==> Configuration for :validatable
# Range for password length. Default is 6..128.
config.password_length = 6..128

# Email regex used to validate email formats. It simply asserts that
# an one (and only one) @ exists in the given string. This is mainly
# to give user feedback and not to assert the e-mail validity.
config.email_regexp = /\A[^@]+@[^@]+\z/

另一种方法是使用您自己的正则表达式验证。您可以添加到您的模型中

validates :password, :format => { :with => /\A[a-zA-Z]+\z/, :message => "Only letters allowed" }

之后你可以调用@user.valid?在您的控制器中检查您的用户实例是否正确。

有许多不同的方法可以验证您的模型。 您可以在指南中阅读有关验证和 ActiveRecord 回调的更多信息:http://guides.rubyonrails.org/active_record_validations_callbacks.html

【讨论】:

    【解决方案2】:

    如果您使用的是设计,则无需检查。默认情况下它会为您处理。

    【讨论】:

    • 谢谢,但我该如何配置?我启用了可验证,但它不起作用。以下是我添加的方式 'em` 设计 :database_authenticable, :rememberable, :trackable, :validatable, :recoverable`
    • 您可能需要重新启动 Rails 服务器才能使设计中的更改发生。记住也要运行任何迁移。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    • 1970-01-01
    • 2011-05-09
    相关资源
    最近更新 更多