【问题标题】:Devise form validation in different forms设计不同形式的表单验证
【发布时间】:2014-04-08 18:16:50
【问题描述】:

我有两种不同的表单(两个不同的控制器),并且这两种表单都使用 Member 模型。

Devise 使用它来创建和更新 MyController 使用它来创建和更新

我的模型根据需要验证所有字段。

举个例子:

我让 MyController 呈现一个包含所有字段的表单(它工作正常) 我让 Devise 出示带有(电子邮件、密码、密码确认)的注册表单。

当我尝试提交设计表单时,它会向我显示不存在的字段的错误。

在模型中设计控制器时如何跳过特定字段的验证?

【问题讨论】:

  • 您的用例是什么? MyModel 是您的设计模型吗?两个控制器是什么意思,您是否覆盖了设计注册控制器(或任何其他控制器)?
  • @rb512 我已经安装并使用了成员模型,但我为用户配置文件创建了一个不同的控制器,其中显示了所有其他字段(编辑和更新),并根据需要在会员模型。默认情况下,设计在注册表单上使用(电子邮件、密码和密码确认),在我将其他字段添加到模型后,当我尝试注册时,设计说这些字段是必需的......基本上设计尝试验证那些不是他的形式。
  • 啊,我明白了,请看下面我的回答。

标签: ruby-on-rails activerecord ruby-on-rails-4 devise


【解决方案1】:

让设计模型尽可能小并仅限于用户身份验证是一个很好的设计。原因是,每次调用 current_user 时,无论您是否需要它们,它都会加载整个对象(以及所有配置文件字段)。

由于您已经创建了一个新控制器,我建议为配置文件属性创建一个新模型并与设计模型创建一个 has_one 关系:

class User < ActiveRecord::Base
 require 'devise'
 has_one :user_profile
end

class UserProfile < ActiveRecord::Base
 belongs_to :user
 <user_profile fields>
end

使用这种方法,您的设计对象将是轻量级的,并且您只能在需要时访问配置文件属性:

  current_user.user_profile

【讨论】:

  • 更干净!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-14
  • 1970-01-01
  • 1970-01-01
  • 2011-12-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多