Guillaume Loader
2009-Feb-20 19:19 UTC
How to change a variable while editing a table? (scaffold)
Hello everyone! I''m trying to modify an example from a book. The example show how to create a scaffold for a table. But I want to change the way things are modified. Here is the method in my controller : def update @product = Product.find(params[:id]) respond_to do |format| if @product.update_attributes(params[:product]) flash[:notice] = ''Product was successfully updated.'' format.html { redirect_to(@product) } format.xml { head :ok } else format.html { render :action => "edit" } format.xml { render :xml => @product.errors, :status => :unprocessable_entity } end end end So I tried to add this line : Product.title = "You don''t decide the title! I do!" after @product = Product.find(params[:id]) But I got an error (undefined method `title='' for #<Class:0x365b654>) Could you help me? Thank you! -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Guillaume Loader
2009-Feb-20 19:21 UTC
Re: How to change a variable while editing a table? (scaffold)
In fact I want to modify this parameters : {"commit"=>"Update", "_method"=>"put", "authenticity_token"=>"31147ee98ead230e953389a3b8d35415162fca34", "id"=>"1", "product"=>{"title"=>"test", "image_url"=>"gifffff", "description"=>"je decide ou pas?@@@"}} -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
CiriusMex
2009-Feb-20 19:25 UTC
Re: How to change a variable while editing a table? (scaffold)
Hi Guillaume, First thing if you want to modify the title on your product after getting it with @product = Product.find(params[:id]) you cant do "Product.title = "You don''t decide the title! I do!"" as "Product" refers to your class and not to the object. You must refer the object that way: @product = Product.find(params[:id]) # Getting the product @product.title = "You don''t decide the title! I do!" # Updating title @product.save # Saving object in database Another thing, if you have a undefined method `title='' for #<Class: 0x365b654> error, it seems that your Product class don''t have a title attribute. Check in the database that your Product table has a title attribute before trying to update it ^^ Cheers, Olivier. On 20 feb, 13:19, Guillaume Loader <rails-mailing-l...-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> Hello everyone! > > I''m trying to modify an example from a book. The example show how to > create a scaffold for a table. > > But I want to change the way things are modified. > > Here is the method in my controller : > > def update > @product = Product.find(params[:id]) > > respond_to do |format| > if @product.update_attributes(params[:product]) > flash[:notice] = ''Product was successfully updated.'' > format.html { redirect_to(@product) } > format.xml { head :ok } > else > format.html { render :action => "edit" } > format.xml { render :xml => @product.errors, :status => > :unprocessable_entity } > end > end > end > > So I tried to add this line : > > Product.title = "You don''t decide the title! I do!" > > after @product = Product.find(params[:id]) > > But I got an error (undefined method `title='' for #<Class:0x365b654>) > > Could you help me? > > Thank you! > -- > Posted viahttp://www.ruby-forum.com/.--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Guillaume Loader
2009-Feb-20 19:36 UTC
Re: How to change a variable while editing a table? (scaffold)
I''ve also tried your way before asking but the title is not modified... Anyway, I''ve find a way to do that by adding this line : params[:product][:title] = "I decide the title" I don''t really understand why by the way ^^ And thank you for your reply :) -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Robby Russell
2009-Feb-20 19:43 UTC
Re: How to change a variable while editing a table? (scaffold)
On Fri, Feb 20, 2009 at 11:19 AM, Guillaume Loader <rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> > Hello everyone! > > I''m trying to modify an example from a book. The example show how to > create a scaffold for a table. > > But I want to change the way things are modified. > > Here is the method in my controller : > > def update > @product = Product.find(params[:id]) > > respond_to do |format| > if @product.update_attributes(params[:product]) > flash[:notice] = ''Product was successfully updated.'' > format.html { redirect_to(@product) } > format.xml { head :ok } > else > format.html { render :action => "edit" } > format.xml { render :xml => @product.errors, :status => > :unprocessable_entity } > end > end > end > > So I tried to add this line : > > Product.title = "You don''t decide the title! I do!" > > after @product = Product.find(params[:id]) > > But I got an error (undefined method `title='' for #<Class:0x365b654>) > > Could you help me? > > Thank you!Why would you want to do this in the controller (not through user input?) If it''s business logic, it belongs in the model. You could do something like this in the Product model with callbacks. class Product < ActiveRecord::base ... before_save :set_title_my_way protected def set_title_my_way self.title = "this is my title..." end end Then when you do an @product.update_attributes(...) in your controller, it''ll run this before it saves overriding anything passed in the parameters. It''s generally bad-mojo to modify params during the request. Additionally, if with ActiveRecord callbacks you can do this before create, update, or save (depending on how you want to approach this.) Learn more about callbacks here: * http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html Hope this helps! Cheers, Robby -- Robby Russell Chief Evangelist, Partner PLANET ARGON, LLC design // development // hosting w/Ruby on Rails http://planetargon.com/ http://robbyonrails.com/ http://twitter.com/planetargon aim: planetargon +1 503 445 2457 +1 877 55 ARGON [toll free] +1 815 642 4068 [fax] --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
deepali_k
2009-Feb-21 13:53 UTC
Re: How to change a variable while editing a table? (scaffold)
First you have to find the product by: @product = Product.find(params[:id]) @product.title = "You don''t decide the title! I do!" @product.save On Feb 21, 12:19 am, Guillaume Loader <rails-mailing-l...@andreas- s.net> wrote:> Hello everyone! > > I''m trying to modify an example from a book. The example show how to > create a scaffold for a table. > > But I want to change the way things are modified. > > Here is the method in my controller : > > def update > @product = Product.find(params[:id]) > > respond_to do |format| > if @product.update_attributes(params[:product]) > flash[:notice] = ''Product was successfully updated.'' > format.html { redirect_to(@product) } > format.xml { head :ok } > else > format.html { render :action => "edit" } > format.xml { render :xml => @product.errors, :status => > :unprocessable_entity } > end > end > end > > So I tried to add this line : > > Product.title = "You don''t decide the title! I do!" > > after @product = Product.find(params[:id]) > > But I got an error (undefined method `title='' for #<Class:0x365b654>) > > Could you help me? > > Thank you! > -- > Posted viahttp://www.ruby-forum.com/.--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---