On Jan 21, 12:05 am, CuriousNewbie <[email protected]> wrote:
> Hello, I'm working to create a method in my controller to check an
> email to see if the email's domain is acceptable. I want to prevent
> gmail and hotmail for certain reasons. Here's what I have so far:
>
> controller:
> if valid_email_domain(email_address)
> # good email domain
> else
> # bad email domain
> end
>
> protected
> def valid_email_domain(emailAddy)
> reg = Regexp.new '/#{User::INVALID_EMAILS.map{|a|
> Regexp.quote(a)}.join("|")}/'
> return true if emailAddy.scan(reg).size == 0
> end
>
> user model:
> INVALID_EMAILS = %w(gmail.com hotmail.com)
>
> But that errors, any ideas? I'm not sure if I'm doing the REGEX
> correctly, could use some regex help.
First, I agree with Marnen that this should be done in the model but I
disagree that the regexp is formed correctly on a very minor point;
you don't need to add the '/' inside the quotes when building a new
regexp object i.e. Regexp.new('some regexp') rather than Regexp.new('/
some regexp/').
So what I would do in the model is:
class User < AR::B
INVALID_EMAILS = %w(gmail.com hotmail.com)
def self.valid_email?(email)
reg = Regexp.new(INVALID_EMAILS*'|') # *'string' is an alias
for .join('string') use whichever you preffer
matches = reg.match(email)
return matches == 0
end
end
Then in the controller you can do
def some_action
if User.valid_email?(params[:email])
#do stuff
else
#do other stuff
end
end
This has the added benefits that you can use this same validation
anywhere in your code and easily add additional conditions to your
validation in a single place.
-T
--
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.