首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于Params的Rails电子邮件验证

基于Params的Rails电子邮件验证
EN

Stack Overflow用户
提问于 2015-12-14 19:11:39
回答 2查看 296关注 0票数 0

我有两个登记表:一个可以注册到任何电子邮件地址,另一个只有一个特定的领域。如何从User.rb模型中允许这一点?

像这样的事情可能会奏效:

代码语言:javascript
运行
复制
validates_format_of :email, :with => /.io/

但是,因为我有两份登记表,而该表格的网址id为2:

代码语言:javascript
运行
复制
validates_format_of :email, :with => /.io/ if params[id] == 2

我知道params在模型中是不可用的,但是基于我想要实现的目标,如何实现呢?

基本上表单与id = 1可以注册到任何电子邮件。使用id = 2的表单只能使用.io电子邮件地址(域)注册。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-14 19:25:43

这听起来像是验证上下文的一个很好的用途。validates*方法可以接受:on选项,该选项是将在其中触发验证的“上下文”的名称;例如:

代码语言:javascript
运行
复制
validates_format_of :email, :with => /\.io\z/, on: :restricted_email

只有当选项context: :restricted_email传递给savesave!方法时,才会触发此验证。下面是如何在控制器中使用它:

代码语言:javascript
运行
复制
def create
  @user = User.new(params[:user])

  if params[:id] == 2
    @user.save!(context: :restricted_email)
  else
    @user.save!
  end
end

这里有一篇很好的博客文章,主题是:http://blog.arkency.com/2014/04/mastering-rails-validations-contexts/

票数 1
EN

Stack Overflow用户

发布于 2015-12-14 19:24:47

您可以向模型添加一个属性,该属性将指示表单注册来自哪个表单,如:registered_io,通过表单中的一个隐藏字段发送给模型。

代码语言:javascript
运行
复制
#...
<%= f.hidden_field :registered_io, value="true" # or false %> 

然后在你的模型中你可以做一个

代码语言:javascript
运行
复制
validates :format_of_io_email_should if self.registered_io 
validates :format_of_universal_email_should if !self.registered_io

def format_of_io_email_should
 # regex ahoy or whatever
end
def format_of_universal_email_should
# same same but different
end

不要忘记运行您的迁移来存储属性!

代码语言:javascript
运行
复制
$ rails migration add_column_registered_io_to_user registered_io:boolean 

另外,不要忘记在控制器中的强参数中允许:registered_io。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34274782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档