wrong number of arguments (1 for 0)

I'm getting a wrong number of arguments (1 for 0) error. This happens when I attempt to login to my app. Also, I upgraded to Ruby 1.8.6, from 1.8.2 (i think) Heres the code:

--- login.rhtml

<% form_tag do %>

<table>   <tr>     <td colspan="2"><font size = "4"><b>Sign-in to BancOffice</b></font></td>   </tr>   <tr>     <td>Company Code:</td>     <td><%= text_field_tag :account_code, params[:account_code] %></td>   </tr>   <tr>     <td>User name:</td>     <td><%= text_field_tag :username, params[:username] %></td>   </tr>   <tr>     <td>Password:</td>     <td><%= password_field_tag :password, params[:password] %></td>   </tr>   <tr>     <td></td>     <td><%= submit_tag "Login" %> </td>   </tr> </table> <% end %>

George Pasley wrote:

I'm getting a wrong number of arguments (1 for 0) error. This happens when I attempt to login to my app. Also, I upgraded to Ruby 1.8.6, from 1.8.2 (i think) Heres the code:

--- login.rhtml

<% form_tag do %>

<table>   <tr>     <td colspan="2"><font size = "4"><b>Sign-in to BancOffice</b></font></td>   </tr>   <tr>     <td>Company Code:</td>     <td><%= text_field_tag :account_code, params[:account_code] %></td>   </tr>   <tr>     <td>User name:</td>     <td><%= text_field_tag :username, params[:username] %></td>   </tr>   <tr>     <td>Password:</td>     <td><%= password_field_tag :password, params[:password] %></td>   </tr>   <tr>     <td></td>     <td><%= submit_tag "Login" %> </td>   </tr> </table> <% end %>

--------------------------- logincontroller.rb

def login     session[:user_id] = nil     if request.post?       employee = Employee.authenticate(params[:username], params[:password], params[:account_code])       if employee         session[:user_id] = employee.id         session[:account_id] = employee.account_id         @option = Option.find_by_employee_id(employee.id)         session[:admin_yn] = @option.admin_yn         redirect_to(:controller => "dashboard", :action => "show")       else         flash[:notice] = "<font color='red'>Invalid user/password combination</font>"       end     end end

# employee.authenticate is line called for error --------------------------------

employee.rb

def self.authenticate(username, password, account_code)     if employee = find(:first, :include => [ :account, :options ],          :conditions => [ "employees.deleted_yn = 0" + " AND employees.username = ?" + " AND accounts.account_code = ?",            username, account_code ])        if employee          expected_password = encrypted_password(password, employee.salt)          if employee.hashed_password != expected_password            employee = nil          end        end        employee     end   end

# if employee = find... is line called for error

Thanks    If you can post the stack trace from the error, that'll help a lot.

One unrelated comment though; you don't need to separate the different strings and add them together in your find conditions. Just make it one string...

[ "employees.deleted_yn = 0 AND employees.username = ? AND accounts.account_code = ?", username, account_code ]

Here's the trace

/usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/active_record/vendor/mysql.rb:566:in `initialize' /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/active_record/vendor/mysql.rb:566:in `new' /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/active_record/vendor/mysql.rb:566:in `scramble41' /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/active_record/vendor/mysql.rb:144:in `real_connect' /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/active_record/connection_adapters/mysql_adapter.rb:389:in `connect' /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/active_record/connection_adapters/mysql_adapter.rb:152:in `initialize' /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/active_record/connection_adapters/mysql_adapter.rb:82:in `new' /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/active_record/connection_adapters/mysql_adapter.rb:82:in `mysql_connection' /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/active_record/connection_adapters/abstract/connection_specification.rb:262:in `send' /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/active_record/connection_adapters/abstract/connection_specification.rb:262:in `connection_without_query_cache=' /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/active_record/query_cache.rb:54:in `connection=' /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/active_record/connection_adapters/abstract/connection_specification.rb:230:in `retrieve_connection' /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/active_record/connection_adapters/abstract/connection_specification.rb:78:in `connection' /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/active_record/associations.rb:1158:in `select_all_rows' /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/active_record/associations.rb:1015:in `find_with_associations' /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/active_record/associations.rb:1013:in `catch' /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/active_record/associations.rb:1013:in `find_with_associations' /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/active_record/base.rb:993:in `find_every' /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/active_record/base.rb:988:in `find_initial' /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/active_record/base.rb:414:in `find' #{RAILS_ROOT}/app/models/employee.rb:19:in `authenticate' #{RAILS_ROOT}/app/controllers/login_controller.rb:10:in `login'

Jon Garvin wrote:

Could be a framework mismatch with Rails. I think you see that if you have Rails <= 1.2.4 and Ruby >= 1.8.6

...and once you upgrade, your conditions can be even nicer:

:conditions=>{:deleted_yn=>false, :username=>username, :account_code=>account_code}

AndyV wrote:

Could be a framework mismatch with Rails. I think you see that if you have Rails <= 1.2.4 and Ruby >= 1.8.6   

I agree.

*groan* Yesterday, I spent the day upgrading to Rails 2.0.2. How can I get my app to point to that instead. I tried changing environments.rb in my project to version 2.0.2, but that didn't seem to work...

Jon Garvin wrote:

Here's the trace

The problem is the upgrade to ruby 1.8.6 (which changed some things in
Digest, which is what's being fiddled with on line 566). Perhaps the easiest way around this is to use the native mysql library
(which is faster anyway)

Fred

Here's the trace

The problem is the upgrade to ruby 1.8.6 (which changed some things
in Digest, which is what's being fiddled with on line 566). Perhaps the easiest way around this is to use the native mysql
library (which is faster anyway)

Actually, going back through the changelogs I notice that the release
notes for 1.2.3 say '1.8.6 compatibility', so anything prior to that
is probably asking for trouble. Activerecord 1.5.1 is part of 1.2.1, so you'd want to at least upgrade
to 1.2.3 (which should be painless).

Fred