I am trying to make a very simple login page that has light-box like features. The only thing I cannot get to work is the behavior of the actual login button. When you click on it it does nothing. I simply want to submit the info given by the client and redirect either to a private page or make the client log in again. Here is the code for my log in box view: <tr> <td>User name: <%= text_field("userform", "user_name",:size=>"20" ) %></td><br> <td>Password: <%= password_field("userform", "password",:size=>"20" ) %></td><br> <td> <%= javascript_include_tag :defaults %> <%= submit_tag ''LOG IN'', :onclick =>remote_function(:url => {:action => :authenticate, } ) %></td><br> <td><input type=''submit'' value='' Close me! '' onClick=''document.getElementById("loginpopup").style.display = "none"''> </td> </tr> And here is the code from my controller for the authentication action I am calling on: class UserController < ApplicationController def authenticate @user = User.new(params[:userform]) valid_user = User.find(:first,:conditions => ["user_name = ? and password = ? ",@user.user_name, @user.password]) if valid_user session[:user_id]=valid_user.user_name redirect_to :action => ''private'' else flash[:notice] = "Invalid User/Password" redirect_to :action=> ''login'' end end def login end def private if !session[:user_id] redirect_to :action=> ''login'' end end def logout if session[:user_id] reset_session redirect_to :action=> ''login'' end end end When I tried typing the code submit_tag ''LOG IN'', :onclick =>remote_function(:url => {:action => :authenticate, } ) into irb, I got this error message: NoMethodError: undefined method `remote_function'' for main:Object There may be a simple error that I am making, as I am pretty new to the ruby language. Also, if anyone knows another way to do this that will work with the partial rendering I use to display the login box, that would be fine, too. -- Posted via http://www.ruby-forum.com/.
On Jul 10, 10:13 pm, Julia Lovel <rails-mailing-l...-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> <td>User name: > <%= text_field("userform", "user_name",:size=>"20" ) %></td><br> > <td>Password: > <%= password_field("userform", "password",:size=>"20" ) > %></td><br> > <td> <%= javascript_include_tag :defaults %> > <%= submit_tag ''LOG IN'', :onclick =>remote_function(:url => > {:action => :authenticate, } ) %></td><br> > <td><input type=''submit'' value='' Close me! '' > onClick=''document.getElementById("loginpopup").style.display = "none"''> > </td> > </tr> >Because you''re just using an onclick on the submit tag this isn''t going to know that you want it to submit these form parameters. Why not use remote_form_for ? It''s also pretty weird to have the tags to load javascript where you have put them.> And here is the code from my controller for the authentication action I > am calling on: > > class UserController < ApplicationController > def authenticate > @user = User.new(params[:userform]) > valid_user = User.find(:first,:conditions => ["user_name = ? and > password = ? ",@user.user_name, @user.password]) > if valid_user > session[:user_id]=valid_user.user_name > redirect_to :action => ''private'' > else > flash[:notice] = "Invalid User/Password" > redirect_to :action=> ''login'' > endYou''ve not told remote_function that you want to update a page element so unless you send back some javascript. You''re just doing a redirect in your authenticate action, however that redirect just redirects the ajax request you made - it won''t affect the page the user is on at all. if you actually wanted to redirect them to the private page you would need to use rjs (or generate the appropriate javascript by hand). If what you wanted was to redirect them to the private action then why use ajax at all ?> When I tried typing the code > submit_tag ''LOG IN'', :onclick =>remote_function(:url => > {:action => :authenticate, } ) > into irb, I got this error message: > NoMethodError: undefined method `remote_function'' for main:Object >That''s because functions like remote_function are only included in your views. If you use rails'' script/console there is an object called something like helpers which has the various view helper methods included. Fred> There may be a simple error that I am making, as I am pretty new to the > ruby language. Also, if anyone knows another way to do this that will > work with the partial rendering I use to display the login box, that > would be fine, too. > -- > Posted viahttp://www.ruby-forum.com/.
Thanks so much for the feedback Fred! This is my first rails project that I''m writing, so I need lots of help. The java script tags were an error I noticed right after I posted, I usually put it in the head. Not intentional. But, as far as the many real problems with my code, could you give me some idea of how it should look corrected? I''m starting with nothing, pretty much, so any hint would help. Frederick Cheung wrote:> On Jul 10, 10:13�pm, Julia Lovel <rails-mailing-l...-ARtvInVfO7m5VldFQK4jKA@public.gmane.orgt> > wrote: > >> </td> >> </tr> >> > > Because you''re just using an onclick on the submit tag this isn''t > going to know that you want it to submit these form parameters. Why > not use remote_form_for ? > It''s also pretty weird to have the tags to load javascript where you > have put them. > >> � � � � � � redirect_to :action => ''private'' >> � � � � else >> � � � � � � flash[:notice] = "Invalid User/Password" >> � � � � � � redirect_to :action=> ''login'' >> � � � � end > > You''ve not told remote_function that you want to update a page element > so unless you send back some javascript. You''re just doing a redirect > in your authenticate action, however that redirect just redirects the > ajax request you made - it won''t affect the page the user is on at > all. if you actually wanted to redirect them to the private page you > would need to use rjs (or generate the appropriate javascript by > hand). If what you wanted was to redirect them to the private action > then why use ajax at all ? > >> When I tried typing the code >> �submit_tag ''LOG IN'', :onclick =>remote_function(:url => >> {:action => :authenticate, } ) >> into irb, I got this error message: >> NoMethodError: undefined method `remote_function'' for main:Object >> > That''s because functions like remote_function are only included in > your views. If you use rails'' script/console there is an object called > something like helpers which has the various view helper methods > included. > > Fred-- Posted via http://www.ruby-forum.com/.
Hi Julia, First, I''ll touch on some of the things you may or may not know. IRB is something you use to test ruby code, specific to the ruby interpreter. script/console or the Rails console is what you use to test rails code, specific to rails. So, it''s better to get used to using the console in rails. Second, it appears you are trying to create your own authentication MVC. I wouldn''t do that, especially if this is your first rails project. I would use a plugin called Authentication.. http://agilewebdevelopment.com/plugins/restful_authentication After using that, you can alter the way your authentication system works or behaves but you won''t have to develop everything from scratch. It also applies RESTful behavior to your controllers which is really what you want to try and maintain in rails. The more restful your controllers are, the easier they are to manage. Let me know if you have any questions on this. I''d be happy to help. -- Posted via http://www.ruby-forum.com/.
Also, I''d recommend following this set of screen learning apps (they are free) http://www.buildingwebapps.com/learningrails When you get to lesson 11, it covers user authentication in great detail. -- Posted via http://www.ruby-forum.com/.
On Jul 10, 11:11 pm, Julia Lovel <rails-mailing-l...-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> Thanks so much for the feedback Fred! > This is my first rails project that I''m writing, so I need lots of help. > The java script tags were an error I noticed right after I posted, I > usually put it in the head. Not intentional. > But, as far as the many real problems with my code, could you give me > some idea of how it should look corrected? I''m starting with nothing, > pretty much, so any hint would help. > >I made a few suggestions in a previous message. Did you try any of them ? Also when you say nothing happened it would be helpful if you could clarify what sort of nothing: nothing changed visually on the page, or no ajax request was made, or one was made but your server did not respond to the request, something else ? You may find firebug useful for diagnosing this sort of thing (and i''d very much recommend that you start by working out exactly why things aren''t working) Fred> > > > Frederick Cheung wrote: > > On Jul 10, 10:13 pm, Julia Lovel <rails-mailing-l...-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> > > wrote: > > >> </td> > >> </tr> > > > Because you''re just using an onclick on the submit tag this isn''t > > going to know that you want it to submit these form parameters. Why > > not use remote_form_for ? > > It''s also pretty weird to have the tags to load javascript where you > > have put them. > > >> redirect_to :action => ''private'' > >> else > >> flash[:notice] = "Invalid User/Password" > >> redirect_to :action=> ''login'' > >> end > > > You''ve not told remote_function that you want to update a page element > > so unless you send back some javascript. You''re just doing a redirect > > in your authenticate action, however that redirect just redirects the > > ajax request you made - it won''t affect the page the user is on at > > all. if you actually wanted to redirect them to the private page you > > would need to use rjs (or generate the appropriate javascript by > > hand). If what you wanted was to redirect them to the private action > > then why use ajax at all ? > > >> When I tried typing the code > >> submit_tag ''LOG IN'', :onclick =>remote_function(:url => > >> {:action => :authenticate, } ) > >> into irb, I got this error message: > >> NoMethodError: undefined method `remote_function'' for main:Object > > > That''s because functions like remote_function are only included in > > your views. If you use rails'' script/console there is an object called > > something like helpers which has the various view helper methods > > included. > > > Fred > > -- > Posted viahttp://www.ruby-forum.com/.