我有两个登记表:一个可以注册到任何电子邮件地址,另一个只有一个特定的领域。如何从User.rb模型中允许这一点?
像这样的事情可能会奏效:
validates_format_of :email, :with => /.io/但是,因为我有两份登记表,而该表格的网址id为2:
validates_format_of :email, :with => /.io/ if params[id] == 2我知道params在模型中是不可用的,但是基于我想要实现的目标,如何实现呢?
基本上表单与id = 1可以注册到任何电子邮件。使用id = 2的表单只能使用.io电子邮件地址(域)注册。
发布于 2015-12-14 19:25:43
这听起来像是验证上下文的一个很好的用途。validates*方法可以接受:on选项,该选项是将在其中触发验证的“上下文”的名称;例如:
validates_format_of :email, :with => /\.io\z/, on: :restricted_email只有当选项context: :restricted_email传递给save或save!方法时,才会触发此验证。下面是如何在控制器中使用它:
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/
发布于 2015-12-14 19:24:47
您可以向模型添加一个属性,该属性将指示表单注册来自哪个表单,如:registered_io,通过表单中的一个隐藏字段发送给模型。
#...
<%= f.hidden_field :registered_io, value="true" # or false %> 然后在你的模型中你可以做一个
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不要忘记运行您的迁移来存储属性!
$ rails migration add_column_registered_io_to_user registered_io:boolean 另外,不要忘记在控制器中的强参数中允许:registered_io。
https://stackoverflow.com/questions/34274782
复制相似问题