Wrong number of arguments (0 for 1) in callback method

I was creating this simple rail application. my controller method looks
like this:

def create()
@simple = Simple.new(params[:simple]) ##params coming from view
@simple.save
end

And my model class “Simple” as below:


class Simple < ActiveRecord::Base
set_table_name “name_desc_table”
set_primary_key “name”

before_create :init_name

private
def init_name(cname)
self.name = cname
end
end

When I run this in browser, it throws error “Wrong number of arguments
(0 for 1)”. Obviously, my method “init_name” expects one parameter and
it doesn’t find any while called(by controller??). Basically I want to
send this ‘cname’ variable from controller to model. Can anybody tell me
what can I do in controller method so that ‘cname’ variable is passed
when callback method is called?

Thanks,
-Kalpesh

On Nov 13, 9:00 am, Kalpesh1 Patel [email protected]
wrote:

When I run this in browser, it throws error “Wrong number of arguments
(0 for 1)”. Obviously, my method “init_name” expects one parameter and
it doesn’t find any while called(by controller??). Basically I want to
send this ‘cname’ variable from controller to model. Can anybody tell me
what can I do in controller method so that ‘cname’ variable is passed
when callback method is called?

Callbacks like before_create can’t take any arguments

Fred

Frederick C. wrote:

On Nov 13, 9:00�am, Kalpesh1 Patel [email protected]
wrote:

When I run this in browser, it throws error “Wrong number of arguments
(0 for 1)”. Obviously, my method “init_name” expects one parameter and
it doesn’t find any while called(by controller??). Basically I want to
send this ‘cname’ variable from controller to model. Can anybody tell me
what can I do in controller method so that ‘cname’ variable is passed
when callback method is called?

Callbacks like before_create can’t take any arguments

Fred

So isn’t there any way I can pass some value from controller to model?

Hi Kalpesh1 Patel

So isn’t there any way I can pass some value from controller to model?

You can define cname as n attr_writer in model and can set its value 

from controller like @simple.cname = ‘namehere’

Sijo

Sijo k g wrote:

Hi Kalpesh1 Patel

So isn’t there any way I can pass some value from controller to model?

You can define cname as n attr_writer in model and can set its value 

from controller like @simple.cname = ‘namehere’

Sijo

Thanks sijo! I am able to get/set it using attr_accessor now :slight_smile:

On Fri, Nov 13, 2009 at 10:39 AM, Kalpesh1 Patel
[email protected] wrote:

when callback method is called?

Callbacks like before_create can’t take any arguments

Fred

So isn’t there any way I can pass some value from controller to model?
What do you mean? Of course you can pass values, in fact, you’re
passing a value there.
I don’t see the need of doing something like the before_create hook.
Why don’t you just pass the value to the constructor? Simple.new(:name
=> params[:simple])


Leonardo M…
There’s no place like ~

Leonardo M. wrote:

On Fri, Nov 13, 2009 at 10:39 AM, Kalpesh1 Patel
[email protected] wrote:

when callback method is called?

Callbacks like before_create can’t take any arguments

Fred

So isn’t there any way I can pass some value from controller to model?
What do you mean? Of course you can pass values, in fact, you’re
passing a value there.
I don’t see the need of doing something like the before_create hook.
Why don’t you just pass the value to the constructor? Simple.new(:name
=> params[:simple])


Leonardo M…
There’s no place like ~

I need before_create because I want to do some preprocessing everytime i
save my ‘Simple’ state in the DB. For example, authentication, logging
or similar stuff I will perform just before ‘save’(this might raise
another question, is this right approach? but this can be a separate
discussion). I thought of passing the value in the callback method
itself but now I am able to do it through attr_accessor. Thanks Leo for
the suggestion :slight_smile:

-Kalpesh