I''m trying to create dynamic select menus for my application. I have a partial that is rendered by an action in my site controller after an :onchange event is triggered. I''ll post the three pieces of code and the error I keep getting. *_models.html.haml* - if models = collection_select :model_id, models, :id, :name, {:prompt => "Select Model"} *site_controller.rb* def update_models # update models in dynamic select boxes make = Make.find(params[:make_id]) models = make.models render :update do |page| page.replace_html ''models'', :partial => ''models'', :object => models end end *browse.html.haml* .form_row = form.collection_select :make_id, Make.find(:all), :id, :name, {:prompt => "Select Makes"}, {:onchange => "#{remote_function(:url => {:action => "update_models"}, :with => "''make_id=''+value")}"} .form_row#models = render :partial => ''models'', :object => @models And from my log: Processing SiteController#update_models (for 127.0.0.1 at 2009-05-01 04:41:13) [POST] Parameters: {"authenticity_token"=>"aOem8MBQboKI/e+KdHjNKgm2DvIQYFCyk14o6TtCj/w=", "make_id"=>"1"} Asked for a remote server ? true, ENV["FERRET_USE_LOCAL_INDEX"] is nil, looks like we are not the server Will use local index. using index in C:/Users/Bradley/Documents/Aptana Studio/GreenYard_003/index/development/make default field list: [:name] [4;35;1mMake Columns (13.0ms) [0m [0mSHOW FIELDS FROM `makes` [0m [4;36;1mMake Load (1.0ms) [0m [0;1mSELECT * FROM `makes` WHERE (`makes`.`id` = 1) [0m Asked for a remote server ? true, ENV["FERRET_USE_LOCAL_INDEX"] is nil, looks like we are not the server Will use local index. using index in C:/Users/Bradley/Documents/Aptana Studio/GreenYard_003/index/development/model default field list: [:name] ActionView::TemplateError (undefined method `map'' for :id:Symbol) on line #2 of app/views/site/_models.html.haml: 1: - if @models 2: = collection_select :model_id, @models.name, :id, :name, {:prompt => "Select Model"} app/views/site/_models.html.haml:2:in `_run_haml_app47views47site47_models46html46haml_locals_models_object'' haml (2.0.9) lib/haml/helpers/action_view_mods.rb:14:in `render'' app/controllers/site_controller.rb:46:in `__instance_exec0'' app/controllers/site_controller.rb:45:in `update_models'' haml (2.0.9) lib/sass/plugin/rails.rb:19:in `process'' c:/ruby/lib/ruby/1.8/webrick/httpserver.rb:104:in `service'' c:/ruby/lib/ruby/1.8/webrick/httpserver.rb:65:in `run'' c:/ruby/lib/ruby/1.8/webrick/server.rb:173:in `start_thread'' c:/ruby/lib/ruby/1.8/webrick/server.rb:162:in `start'' c:/ruby/lib/ruby/1.8/webrick/server.rb:162:in `start_thread'' c:/ruby/lib/ruby/1.8/webrick/server.rb:95:in `start'' c:/ruby/lib/ruby/1.8/webrick/server.rb:92:in `each'' c:/ruby/lib/ruby/1.8/webrick/server.rb:92:in `start'' c:/ruby/lib/ruby/1.8/webrick/server.rb:23:in `start'' c:/ruby/lib/ruby/1.8/webrick/server.rb:82:in `start'' -e:2:in `load'' -e:2 Rendered rescues/_trace (193.0ms) Rendered rescues/_request_and_response (1.0ms) Rendering rescues/layout (internal_server_error) es/_request_and_response (1.0ms) Rendering rescues/layout (internal_server_error) [4;35;1mSQL (1.0ms) [0m [0mSET NAMES ''utf8'' [0m [4;36;1mSQL (0.0ms) [0m [0;1mSET SQL_AUTO_IS_NULL=0 [0m Any suggestions? Thanks! -- Posted via http://www.ruby-forum.com/.
Hi, can you verify parameters to collection_select. Are they proper? Regards, gaurav On May 1, 2:19 pm, Bradley Herman <rails-mailing-l...-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> I''m trying to create dynamic select menus for my application. I have a > partial that is rendered by an action in my site controller after an > :onchange event is triggered. I''ll post the three pieces of code and > the error I keep getting. > > *_models.html.haml* > - if models > = collection_select :model_id, models, :id, :name, {:prompt => "Select > Model"} > > *site_controller.rb* > def update_models > # update models in dynamic select boxes > make = Make.find(params[:make_id]) > models = make.models > > render :update do |page| > page.replace_html ''models'', :partial => ''models'', :object => models > end > end > > *browse.html.haml* > .form_row > = form.collection_select :make_id, Make.find(:all), :id, :name, > {:prompt => "Select Makes"}, {:onchange => "#{remote_function(:url => > {:action => "update_models"}, :with => "''make_id=''+value")}"} > .form_row#models > = render :partial => ''models'', :object => @models > > And from my log: > > Processing SiteController#update_models (for 127.0.0.1 at 2009-05-01 > 04:41:13) [POST] > Parameters: > {"authenticity_token"=>"aOem8MBQboKI/e+KdHjNKgm2DvIQYFCyk14o6TtCj/w=", > "make_id"=>"1"} > Asked for a remote server ? true, ENV["FERRET_USE_LOCAL_INDEX"] is nil, > looks like we are not the server > Will use local index. > using index in C:/Users/Bradley/Documents/Aptana > Studio/GreenYard_003/index/development/make > default field list: [:name] > [4;35;1mMake Columns (13.0ms) [0m [0mSHOW FIELDS FROM `makes` [0m > [4;36;1mMake Load (1.0ms) [0m [0;1mSELECT * FROM `makes` WHERE > (`makes`.`id` = 1) [0m > Asked for a remote server ? true, ENV["FERRET_USE_LOCAL_INDEX"] is nil, > looks like we are not the server > Will use local index. > using index in C:/Users/Bradley/Documents/Aptana > Studio/GreenYard_003/index/development/model > default field list: [:name] > > ActionView::TemplateError (undefined method `map'' for :id:Symbol) on > line #2 of app/views/site/_models.html.haml: > 1: - if @models > 2: = collection_select :model_id, @models.name, :id, :name, {:prompt > => "Select Model"} > > app/views/site/_models.html.haml:2:in > `_run_haml_app47views47site47_models46html46haml_locals_models_object'' > haml (2.0.9) lib/haml/helpers/action_view_mods.rb:14:in `render'' > app/controllers/site_controller.rb:46:in `__instance_exec0'' > app/controllers/site_controller.rb:45:in `update_models'' > haml (2.0.9) lib/sass/plugin/rails.rb:19:in `process'' > c:/ruby/lib/ruby/1.8/webrick/httpserver.rb:104:in `service'' > c:/ruby/lib/ruby/1.8/webrick/httpserver.rb:65:in `run'' > c:/ruby/lib/ruby/1.8/webrick/server.rb:173:in `start_thread'' > c:/ruby/lib/ruby/1.8/webrick/server.rb:162:in `start'' > c:/ruby/lib/ruby/1.8/webrick/server.rb:162:in `start_thread'' > c:/ruby/lib/ruby/1.8/webrick/server.rb:95:in `start'' > c:/ruby/lib/ruby/1.8/webrick/server.rb:92:in `each'' > c:/ruby/lib/ruby/1.8/webrick/server.rb:92:in `start'' > c:/ruby/lib/ruby/1.8/webrick/server.rb:23:in `start'' > c:/ruby/lib/ruby/1.8/webrick/server.rb:82:in `start'' > -e:2:in `load'' > -e:2 > > Rendered rescues/_trace (193.0ms) > Rendered rescues/_request_and_response (1.0ms) > Rendering rescues/layout (internal_server_error) > es/_request_and_response (1.0ms) > Rendering rescues/layout (internal_server_error) > [4;35;1mSQL (1.0ms) [0m [0mSET NAMES ''utf8'' [0m > [4;36;1mSQL (0.0ms) [0m [0;1mSET SQL_AUTO_IS_NULL=0 [0m > > Any suggestions? Thanks! > -- > Posted viahttp://www.ruby-forum.com/.
gaurav v bagga wrote:> Hi, > can you verify parameters to collection_select. Are they proper? > > Regards, > gaurav > > On May 1, 2:19�pm, Bradley Herman <rails-mailing-l...@andreas-s.net>After doing some testing, it would appear Rails is just having a major problem with my partial. The parameters are fine, but something about having that code in a partial is throwing it off. When I replace the current stuff with the exact same code that I have in my browse.html.haml layout, it messes up and gives me weird errors about arguments... wrong number of arguments (0 for 1) Extracted source (around line #4): 1: - if @models 2: = form.collection_select :model_id, @models, :id, :name, :prompt => "Select Model" 3: - else 4: = form.collection_select :model_id, Model.find(:all), :id, :name, {:prompt => "Select Model"} If I leave "form." off, I get the "undefined method :map for :id:Symbol error" still. -- Posted via http://www.ruby-forum.com/.
Okay I solved that, partially. I needed to pass :locals => {:form => form} from my view when first rendering the partial. The problem is, though, that on the :onchange event, the partial is rendered through the controller, so I can''t pass :locals from there. So after the :onchange event, I get the same error with the form.collection_select throwing a "Wrong number of arguments 0 for 1" error. -- Posted via http://www.ruby-forum.com/.