【问题标题】:Validation issues in RailsRails 中的验证问题
【发布时间】:2014-02-19 16:31:09
【问题描述】:

我正在使用 Rails 3.2.16、devise 和 mongoid(可能与此问题相关的 Gems)。

用户注册后,我设计了重定向他们以创建一个新的个人资料,belongs_to :user。我正在使用以下设计覆盖来执行此操作:

  def after_sign_up_path_for(resource)
    new_profile_path
  end

在个人资料上,我在各个地方调用验证,例如validates :biz_name, :on => :update, :presence => {:message => 'Business name cannot be blank'}

new_profile_path 在用户注册后加载时,他们会立即在我称之为验证的字段上收到验证错误。起初我很困惑,因为根据我上面的代码,我只在update 上调用验证。所以验证运行的原因是没有意义的。

无论如何,我找到了我的错误。我的个人资料模型中有一些字段具有默认值,例如field :position_order, :type => Integer, :default => 1。似乎首先使用这些默认值创建配置文件,然后当向用户显示以进行编辑时,实际上是调用了 update 方法 - 因此调用了验证错误。

我该如何解决这个问题?归根结底,我想要两件事:

-在用户能够编辑他们的个人资料之前,使用一些默认值填充个人资料
- 在配置文件编辑页面的第一个视图上,不应该运行验证(因此用户在他们做任何事情之前都不会看到一堆错误)。

【问题讨论】:

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


    【解决方案1】:

    嗯,我想说你应该重新考虑要求。无效的默认值有什么用?

    您还可以提供前端行为来指导用户使用 HTML 或 Javascript 正确输入。

    【讨论】:

    • Re: 建议 #2,我可以,但我也想要服务器端验证,所以我不想只依赖客户端验证。回复:#1 我愿意重新考虑这些要求,但我不确定如何完成它。例如,我需要默认值,这取决于用户注册的帐户类型,它会为配置文件提供“位置值”。例如,如果帐户级别 = pro,则头寸值可能为 1,而如果帐户级别 = 中间,则头寸值可能为 2。这就是我使用默认值的原因。我我可以使用隐藏字段而不是配置文件编辑,但我不确定这是最好的方法吗?
    • 我的意思是,如果您使用的默认值在您的验证方案中有效,它应该可以工作。是的,甚至还有客户端验证:)。我只是指表单字段中的占位符或通过鼠标悬停的工具提示或其他东西。所以在你的例子中,我只会添加一个 biz_name 默认值。我并不是说那将是最好的解决方案。也许其他人有一个很好的提示。
    • 并非所有需要验证的字段都有默认值——这就是我遇到问题的地方。感谢您的回复,顺便说一句。
    • 你可以看看ActiveRecord callbacks。因此,如果需要,您必须编写一些逻辑来在关联模型中添加所需的默认值。
    • 也许你花时间给出一个导致问题的简短例子。两个相关模型和一个属性,您需要默认值或其他属性。那么更有经验的人可以给出更好的建议:)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多