wrong number of arguments error

Hey all,

I did a script/generate controler users in console.

Then I added the following to users controller:

class UsersController < ApplicationController   def initialize(first_name, last_name)     @first_name = first_name     @last_name = last_name   end

  def full_name()     return "#{@first_name} + #{@last_name}"   end end

I have this in users/index.html.erb

<% user = UsersController.new("John", "Merlino") %>

<h1><%= puts(user.full_name()) %></h1>

and in routes:   map.root :controller => 'users'

I get error: ArgumentError in UsersController#index

wrong number of arguments (0 for 2)

Thanks for response.

John Merlino wrote in post #964838:

Hey all,

I did a script/generate controler users in console.

Then I added the following to users controller:

class UsersController < ApplicationController   def initialize(first_name, last_name)     @first_name = first_name     @last_name = last_name   end

  def full_name()

You don't need the empty parentheses.

    return "#{@first_name} + #{@last_name}"   end end

No! These methods belong in the model, not the controller. Review MVC philosophy: a model object represents data. The controller mediates between the model and the view.

I have this in users/index.html.erb

<% user = UsersController.new("John", "Merlino") %>

Again, you want User, not UsersController.

<h1><%= puts(user.full_name()) %></h1>

and in routes:   map.root :controller => 'users'

I get error: ArgumentError in UsersController#index

wrong number of arguments (0 for 2)

Thanks for response.

Best,

You are right. It worked. Nevertheless, the behavior was the same. We instantiated an object and called a constructor method of the class. Both User and UsersController are classes. I don't know what is causing the behavior to be different. Are there any good books on MVC design patterns? I already have the book Design Patterns in Ruby and I don't see MVC mentioned in it. Thanks for response.

You are right. It worked. Nevertheless, the behavior was the same. We instantiated an object and called a constructor method of the class. Both User and UsersController are classes. I don't know what is causing the behavior to be different.

Rails creates an instance of your controller for you as part of the request handling process, and is probably expecting a controllers initialize method to take 0 arguments, but since you've changed the signature of initialize that blows up. Overriding initialize like that on a subclass of ActiveRecord will also cause trouble but it might take a little longer for you to get into trouble.

Fred

John Merlino wrote in post #964846:

You are right. It worked. Nevertheless, the behavior was the same. We instantiated an object and called a constructor method of the class. Both User and UsersController are classes. I don't know what is causing the behavior to be different.

Gee, do you think it could have something to do with the fact that they inherit from different parents -- which could change the behavior?

Are there any good books on MVC design patterns? I already have the book Design Patterns in Ruby and I don't see MVC mentioned in it. Thanks for response.

Any basic Rails reference (including the Guides) explains how Rails uses MVC. You probably don't need Design Patterns in Ruby for *anything* at this stage...

Best,