Hi All, I am working on my first RoR application and running into an issue. I''ve been working through the authentication example in the AWDR book and have a question about the login form. Basically, there is a login page that has an email address/password field on it. There is a login method that basically looks for the user by email address, if they exist, it attempts to authenticate them. My question is this: since I am not trying to save a new model, is there a way to take advantage of active record''s built-in validation? I''d like to be able to validate that the email/password are populated and that they are valid. I''d also like to be able to display the error message in the same sort of errors collection accessible by the model. I noticed I''m not able to access the ''errors'' collection from the controller. Any help would be appreciated. Thanks in advance, J -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
The ActiveRecord validation is applied when you save a new instance of a model. For a login feature, you aren''t saving a new model (as you noted) and therefore it doesn''t apply here. If you have some particular reason to validate the login credentials before pulling the user info from the database (why would you want to do that, though?), you could do a User.new(params).valid?, but that would give you errors for all of any empty fields you are validating in the model. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Dave Smith wrote:> The ActiveRecord validation is applied when you save a new instance of a > model. For a login feature, you aren''t saving a new model (as you > noted) and therefore it doesn''t apply here. > > If you have some particular reason to validate the login credentials > before pulling the user info from the database (why would you want to do > that, though?), you could do a User.new(params).valid?, but that would > give you errors for all of any empty fields you are validating in the > model.The purpose is determine whether or not a i have a syntactically valid email address and that the email address and password are filled in before i go searching the database to see if the user is valid or not. Does that make more sense? -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
> The purpose is determine whether or not a i have a syntactically valid > email address and that the email address and password are filled in > before i go searching the database to see if the user is valid or not. > Does that make more sense?You could use some client-side javascript validation for that. But if you want to do it server side, you would do something like... # Assuming you params[:email] and params[:password] u = User.new(params) u.valid? email_invalid, password_invalid u.errors.on(:email), u.errors.on(:password) unless email_invalid or password_invalid user = User.find(:first, :conditions => [''email = ?'', params[:email]]) blah_blah_blah end -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Dave Smith wrote:>> The purpose is determine whether or not a i have a syntactically valid >> email address and that the email address and password are filled in >> before i go searching the database to see if the user is valid or not. >> Does that make more sense? > > You could use some client-side javascript validation for that. > > But if you want to do it server side, you would do something like... > > # Assuming you params[:email] and params[:password] > u = User.new(params) > u.valid? > > email_invalid, password_invalid > u.errors.on(:email), u.errors.on(:password) > > unless email_invalid or password_invalid > user = User.find(:first, :conditions => [''email = ?'', params[:email]]) > blah_blah_blah > endDave, I think this should do the trick. Thank you for your help. - J -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Jim Dix wrote:> Dave Smith wrote: >>> The purpose is determine whether or not a i have a syntactically valid >>> email address and that the email address and password are filled in >>> before i go searching the database to see if the user is valid or not. >>> Does that make more sense? >> >> You could use some client-side javascript validation for that. >> >> But if you want to do it server side, you would do something like... >> >> # Assuming you params[:email] and params[:password] >> u = User.new(params) >> u.valid? >> >> email_invalid, password_invalid >> u.errors.on(:email), u.errors.on(:password) >> >> unless email_invalid or password_invalid >> user = User.find(:first, :conditions => [''email = ?'', params[:email]]) >> blah_blah_blah >> end > > Dave, > > I think this should do the trick. Thank you for your help. > > - JSeem to be having a problem...I added the code you suggested in my login method and am getting the following error: NoMethodError in AuthenticationController#login undefined method `commit='' for #<Member:0x48071b4> The commit field is being generated from the <%= submit_tag "Login" %> tag. I''m pretty sure I don''t need this in my model, any ideas? -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Hmm... I don''t know. (I''m pretty new to this rails thing, also). Are you using form_for or form_tag? Can you post the resulting page source, at least for the relevant bits? -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---