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