LogIn Button using remote_function

<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' 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

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.

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.

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