形势:
我得到了一个用户模型,它需要通过黑名单上的电子邮件地址列表来验证。黑名单上的电子邮件地址位于另一个称为黑名单的模型中。
型号/user.rb:
class User < ActiveRecord::Base
validate :email_is_not_blacklisted
def email_is_not_blacklisted
@blacklist = Blacklist.where(:blacklist_type => "E-Mail")
@blacklist.each do |item|
errors.add(:email, 'is blacklisted') if self.email.match(item)
end
end
end模型/黑名单.
class Blacklist < ActiveRecord::Base
attr_accessible :name, :blacklist_type
#some validation code for blacklist items ...
end黑名单条目示例
#: name, blacklist_type
#1: 'demo-mail.com', 'E-Mail'
#2: 'test123.com', 'E-Mail'黑名单模式也将用于禁止特定的用户名在未来!
问题:
我的问题是黑名单总是零。也许我的逻辑有什么问题?换句话说:是否有可能访问另一个模型中的模型而不进行任何协商?
感谢您的帮助,并道歉现有的语言错误。我不是以英语为母语的人
解决方案!我错过了定义项目的哪个属性应该使用.
errors.add(:email, 'is blacklisted') if self.email.match(item.name)有时候我的大脑不喜欢我喜欢的方式..。
发布于 2012-09-28 12:54:01
我建议你用这个
class User < ActiveRecord::Base
validate :email_is_not_blacklisted
def email_is_not_blacklisted
if Blacklist.find_by_blacklist_type_and_name("E-Mail",self.email)
errors.add(:email, 'is blacklsited')
end
end
end这会比以前的更快
发布于 2012-09-28 11:37:51
案件敏感性。您正在搜索黑名单类型=“电子邮件”,您的示例数据是“电子邮件”。
发布于 2012-09-28 12:06:52
若要详细说明我的意见,请尝试如下:
class User < ActiveRecord::Base
validate :email_is_not_blacklisted
def email_is_not_blacklisted
Blacklist.find_all_by_blacklist_type("E-Mail").each do |item|
errors.add(:email, 'is blacklsited') if.self.email.match(item)
end
end
endhttps://stackoverflow.com/questions/12638999
复制相似问题