How to do a puts in user.rb

Hi,

My form_for is loading properly and also storing in the db.

My show user is also fine.

I just want to do a puts “user name is #{user.name}” this gives me

NoMethodError

in UsersController#new

When I use self.name it give the same error

but when I do the same at the console, it works fine. What is that I am missing.

Thanks

Show us the code that is failing and the full error message and tell us which line it is failing on. Then we might be able to help.

Colin

This is what I have and it gives the error.

validates :uname, :presence => true, :length => { :maximum => 50 }

puts “The name is set to #{user.uname}”

But without the puts it updates the record into the databse. I think it is to do with scoping. If have this puts after make salt then I have no problem

If you're inside of user.rb, then user.uname won't have any context. Try self.uname or just uname, and see if that works.

Walter

Yeah, I have tried both of them and even :name. Unfortunately the ans is no.

How does validates work then ?

Regards,

I am still unable to understand where is the current_user working and where not? It appears like you are using nifty:authentication for authentication,

post the controller method, mention the scope where it is, where are you using the helper, etc etc. and then we could help you in a better way.

Please don't top post, it makes it difficult to follow the thread. Insert your reply at appropriate points in previous post. Thanks

This is what I have and it gives the error.

validates :uname, :presence => true, :length => { :maximum => 50 }

puts "The name is set to #{user.uname}"

But without the puts it updates the record into the databse. I think it is to do with scoping. If have this puts after make salt then I have no problem

You still have not shown the complete error message as I asked.

Is the puts line immediately after the validates line or is it in another method? Show us a bit more code around the problem.

Colin

Please don’t top post, it makes it difficult to follow the thread.

Insert your reply at appropriate points in previous post. Thanks

This is what I have and it gives the error.

validates :uname, :presence => true,

                :length   => { :maximum => 50 }

puts “The name is set to #{user.uname}”

But without the puts it updates the record into the databse. I think it is

to do with scoping. If have this puts after make salt then I have no

problem

I cannot access my server currently, but I have sent the error message in the first mail.

Yes, the puts is immediately after the validates. It is in the user.rb file and user is my model.

The puts works fine after the before* callback.

Hi Jatin,

The flow is like this.

user_controller → create new user view → user updates the form → then I do the validates in the user model → there immediatly after validate i do “puts”.

Here the puts has problem but when I have the puts in the before callback (where I generate and store the salt of the password) it does not show any error.

Thanks & Regards,

Please don't top post, it makes it difficult to follow the thread. Insert your reply at appropriate points in previous post. Thanks

> This is what I have and it gives the error. > > validates :uname, :presence => true, > :length => { :maximum => 50 } > > puts "The name is set to #{user.uname}" > > But without the puts it updates the record into the databse. I think > it is > to do with scoping. If have this puts after make salt then I have no > problem

I cannot access my server currently, but I have sent the error message in the first mail.

No you did not put the *complete* error message in the first post, the message would have gone on to say which method was undefined and would have told you where the problem had occurred.

Yes, the puts is immediately after the validates. It is in the user.rb file and user is my model.

The validates line does not itself do the validation, it is a macro that registers a callback to do the validation at the appropriate point. The validates line itself is executed when the file is loaded, not when the validation is done. Similarly your puts will not be executed after the validation, but when the file is loaded (after the validates macro is run). If the purpose of the puts is to help to debug your application have a look at the Rails Guide on debugging. It explains, amongst other techniques, how to use ruby-debug to break into your code and inspect data and program flow.

Colin

This is what I have and it gives the error.

validates :uname, :presence => true, :length => { :maximum => 50 }

puts “The name is set to #{user.uname}”

I don’t know why you’re getting the error but why do you want to do this? even if it doesn’t throw an error,

the line with puts won’t run after validates because the save process doesn’t work that way.

if you really want to use that line, use it inside an after_validation callback so it will be run after validation.

after_validation :puts_user_name

def puts_user_name

puts “The name is set to #{user.uname}”

end

This is what I have and it gives the error.

validates :uname, :presence => true, :length => { :maximum => 50 }

puts “The name is set to #{user.uname}”

I don’t know why you’re getting the error but why do you want to do this? even if it doesn’t throw an error,

the line with puts won’t run after validates because the save process doesn’t work that way.

if you really want to use that line, use it inside an after_validation callback so it will be run after validation.

after_validation :puts_user_name

def puts_user_name

puts “The name is set to #{user.uname}”

end

I want to update some fields of the user based on some criteria that the user inputs.

puts “the name of the user is #{user.name}” the entire line appears in the server log window (rails server) window, expcet for the value of variable.

I will check the after_validation and see if I can use it – thanks for the idea.

Can you also expalin how validates get the values from the form_for

Regards,

It doesn't, your code does that and then calls save. When you call save the validations get called at appropriate points around the save to check the data.

Have a look at the Rails Guide 'ActiveRecord Validations and Callback'.

Colin

… Can you also expalin how validates get the values from the form_for

It doesn’t, your code does that and then calls save. When you call

save the validations get called at appropriate points around the save

to check the data.

Have a look at the Rails Guide ‘ActiveRecord Validations and Callback’.

Colin

I click “sign up” → form_for gets displayed → I click “save” then in user.rb validates takes place. Am I correct to say this.

Regards,

… Can you also expalin how validates get the values from the form_for

It doesn’t, your code does that and then calls save. When you call

save the validations get called at appropriate points around the save

to check the data.

Have a look at the Rails Guide ‘ActiveRecord Validations and Callback’.

Colin

I click “sign up” → form_for gets displayed → I click “save” then in user.rb validates takes place. Am I correct to say this.

simplest way to explain it. i guess.

… Can you also expalin how validates get the values from the form_for

It doesn’t, your code does that and then calls save. When you call

save the validations get called at appropriate points around the save

to check the data.

Have a look at the Rails Guide ‘ActiveRecord Validations and Callback’.

Colin

I click “sign up” → form_for gets displayed → I click “save” then in user.rb validates takes place. Am I correct to say this.

simplest way to explain it. i guess.

Sorry, i did not get you. I said what I have learnt from the tutorial. For brevity, I skipped the controller parts.

… Can you also expalin how validates get the values from the form_for

It doesn’t, your code does that and then calls save. When you call

save the validations get called at appropriate points around the save

to check the data.

I mean in which variable validates gets the value from, The actual line in the program is

validates :uname, :presence => true,

                :length   => { :maximum => 50 }

After you click 'save' it goes off to some controller action. Somewhere in there it presumably calls @user.save @user.update_attributes or one of the other ways that a record gets saved. It is at this point that the validations get called.

Colin

As I said that is not the line that does the validations, it just registers that they are to be done. Did you work through the Rails Guide as I suggested, that should make it clear.

The validation gets called when you do @user.save or something similar. The attributes for both the validation and the save are in @user in this case.

Colin

Can you also expalin how validates get the values from the form_for

It doesn’t, your code does that and then calls save. When you call

save the validations get called at appropriate points around the save

to check the data.

Have a look at the Rails Guide ‘ActiveRecord Validations and Callback’.

Colin

I click “sign up” → form_for gets displayed → I click “save” then in

user.rb validates takes place. Am I correct to say this.

After you click ‘save’ it goes off to some controller action.

Somewhere in there it presumably calls @user.save

@user.update_attributes or one of the other ways that a record gets

saved. It is at this point that the validations get called.

Colin

– Yes, you are correct, I understand that. In my users_contoller.rb I have,

def create @user = User.new(params[:user]) # Handle a successful save. if @user.save

    redirect_to @user
else
  @title = "Sign up"
  render 'new'
end

end

At that time the validates in the model user.rb gets triggered, am I correct to say that. It validates the fields based on the code like

validates :uun, :presence => true, length => { :maximum =>12}, :uniqueness => true validates :uname, :presence => true, length => { :maximum => 64} etc…

after this I use puts “the name is #{uname}”. This has problem.

But if I do the puts in “before_save :encryt_password”. Then I have no errors.

I just want to add some more fields before saving the record, that’s why it is important for me.

So, if I know in which variable validates gets the value, might be I can also use it in the same manner.

Thanks & Regards, Bhasker.