Hello All: I am trying to create a select box that is filled with options based on the user''s selection in a related drop-down. I have had success with this before using the examples provided by the following two sources: One posted by Rory at Rory on Rails - http://www.roryhansen.ca/?p=9 the other posted by Adam at http://www.adamhegedus.com/articles/2006/01/19/ajaxed-select-boxes-in-rails Here is my problem: The user selects a Utility and a select with Receiving Points is updated with the items related to the specific utility. Here is my code... <<controller>> def fill_rec_points @lookups = Lookup.find_all_by_list_prompt(@params[:utility], :order => ''list_item'') render :partial => ''rec_points'' #I use a partial here to fill the span so as not to mix View and Business logic in the controller... end <<view>> <p><label for="deal_utility">Utility</label><br/> <%= select ''deal'', ''utility'', %w{ PG&E SoCal SDG&E Southwest}, :include_blank => true %></p> <span id="rec_point_list"> <label for="deal_rec_point">Receipt Point</label><br/> <select id="deal[rec_point]" name="deal[rec_point]"></select> </span> <%= observe_field("deal[utility]", :frequency => 0.25, :update => "rec_point_list", :url => {:action => :fill_rec_points}, :with => "''list_item=''+value") %> The problem seems to be that the controller is not picking anything up from the @params[:utility] reference. I have tried every variation of this I know (i.e. @params[''deal''][''utility], @params["utility"], etc.); all to no avail. I know everything is set up right with the prototype.js stuff because when I manually enter the utility string in the controller (i.e. ''SoCal'') instead of @params[:utility] (or whatever else I have tried), it works great. I just can''t seem to get the user''s selection to pass to my method. Any ideas? One last thought...when I have gotten this to work before in other projects I have passed an id integer and not a string like I am trying to do now, so maybe I am referencing my @params wrong? Thanks to All and sorry for a long post... -- Posted via http://www.ruby-forum.com/.
Hi David, My first shot would be to try it with ''params'' instead of ''@params''. The ''@'' is being deprecated. Let us know if that helps. Bill ----- Original Message ----- From: "David Hughes" <divotdave@mac.com> To: <rails@lists.rubyonrails.org> Sent: 2006-04-09 9:33 AM Subject: [Rails] Help With Dependent Drop-Down and @Params> Hello All: > > I am trying to create a select box that is filled with options based on > the user''s selection in a related drop-down. I have had success with > this before using the examples provided by the following two sources: > > One posted by Rory at Rory on Rails - http://www.roryhansen.ca/?p=9 > > the other posted by Adam at >http://www.adamhegedus.com/articles/2006/01/19/ajaxed-select-boxes-in-rails> > Here is my problem: > The user selects a Utility and a select with Receiving Points is updated > with the items related to the specific utility. Here is my code... > > <<controller>> > def fill_rec_points > @lookups = Lookup.find_all_by_list_prompt(@params[:utility], :order > => ''list_item'') > render :partial => ''rec_points'' > #I use a partial here to fill the span so as not to mix View and > Business logic in the controller... > end > > <<view>> > <p><label for="deal_utility">Utility</label><br/> > <%= select ''deal'', ''utility'', %w{ PG&E SoCal SDG&E Southwest}, > :include_blank => true %></p> > > <span id="rec_point_list"> > <label for="deal_rec_point">Receipt Point</label><br/> > <select id="deal[rec_point]" name="deal[rec_point]"></select> > </span> > > <%= observe_field("deal[utility]", > :frequency => 0.25, > :update => "rec_point_list", > :url => {:action => :fill_rec_points}, > :with => "''list_item=''+value") %> > > The problem seems to be that the controller is not picking anything up > from the @params[:utility] reference. I have tried every variation of > this I know (i.e. @params[''deal''][''utility], @params["utility"], etc.); > all to no avail. > > I know everything is set up right with the prototype.js stuff because > when I manually enter the utility string in the controller (i.e. > ''SoCal'') instead of @params[:utility] (or whatever else I have tried), > it works great. I just can''t seem to get the user''s selection to pass to > my method. Any ideas? > > One last thought...when I have gotten this to work before in other > projects I have passed an id integer and not a string like I am trying > to do now, so maybe I am referencing my @params wrong? Thanks to All and > sorry for a long post... > > -- > Posted via http://www.ruby-forum.com/. > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails
Bill Walton wrote:> Hi David, > > My first shot would be to try it with ''params'' instead of ''@params''. > The > ''@'' is being deprecated. > > Let us know if that helps. > > Bill >>Thanks Bill...I have tried that variation as well...same result. For some reason, I have trouble referencing form fields with the following name or id setting: model[object], which the <% select %> outputs in the html (in my case it outputs deal[utility]. I have read documentation on using params and @params which refers to the field via @params[:utility] or @params["utiliy"]. I have had this working passing an id integer but am stuck trying it with a string...any other ideas? Thanks... -- Posted via http://www.ruby-forum.com/.
@params["deal"]["utility"] maybe? I do the same thing with a select but don''t have my code handy right now. David Hughes wrote:> Thanks Bill...I have tried that variation as well...same result. For > some reason, I have trouble referencing form fields with the following > name or id setting: model[object], which the <% select %> outputs in the > html (in my case it outputs deal[utility]. I have read documentation on > using params and @params which refers to the field via @params[:utility] > or @params["utiliy"]. > > I have had this working passing an id integer but am stuck trying it > with a string...any other ideas? Thanks...-- Posted via http://www.ruby-forum.com/.
The Barge wrote:> @params["deal"]["utility"] maybe? I do the same thing with a select but > don''t have my code handy right now. >Barge...tried that to...nada. Thanks for the suggestion. It is weird. If you could get a copy of your code to post? Maybe looking at the whole thing would help... -- Posted via http://www.ruby-forum.com/.
> The Barge wrote: >> @params["deal"]["utility"] maybe? I do the same thing with a select but >> don''t have my code handy right now. >> > > Barge...tried that to...nada. Thanks for the suggestion. It is weird. > > If you could get a copy of your code to post? Maybe looking at the whole > thing would help...Also...when I try @params["deal"]["utility"] I get an error for an undefined method. Can''t evaluate nil.[]...??? -- Posted via http://www.ruby-forum.com/.
David Hughes> > Also...when I try @params["deal"]["utility"] I get an error for an > undefined method. Can''t evaluate nil.[]...???In looking back at the controller code you posted, I don''t see that you''re passing the "deal" in. That seems to be the first problem this error message is getting you to look for. It may be that you just haven''t included that piece of code. Best regards, Bill
Brian Hughes ''89
2006-Apr-09 16:25 UTC
[Rails] Re: Help With Dependent Drop-Down and @Params
OK. This is a case where you need to have a view for this controller, and in the view you place: <pre><%= params.debug %></pre> That will show you the makeup of the params object, so that you can figure out how you need to reference the object in the hash. If the HTML being produced shows a form field with name="deal [utility]", that tells Rails to create a :deal hash, within the params hash, with one entry using :utility as it''s key. Referencing params[:deal][:utility] should return the value of that entry... -Brian On Apr 9, 2006, at 11:54 AM, David Hughes wrote:> The Barge wrote: >> @params["deal"]["utility"] maybe? I do the same thing with a >> select but >> don''t have my code handy right now. >> > > Barge...tried that to...nada. Thanks for the suggestion. It is weird.
David Hughes
2006-Apr-09 16:37 UTC
[Rails] Re: Re: Help With Dependent Drop-Down and @Params
Brian Hughes ''89 wrote:> OK. This is a case where you need to have a view for this controller, > and in the view you place: > > <pre><%= params.debug %></pre> > > That will show you the makeup of the params object, so that you can > figure out how you need to reference the object in the hash. > > If the HTML being produced shows a form field with name="deal > [utility]", that tells Rails to create a :deal hash, within the > params hash, with one entry using :utility as it''s key. Referencing > params[:deal][:utility] should return the value of that entry... > > -BrianThanks to everyone for helping so far...Brian, when I tried your suggestion of params[:deal][:utility] this is the error I get: NoMethodError in Deals#fill_rec_points You have a nil object when you didn''t expect it! You might have expected an instance of Array. The error occured while evaluating nil.[] RAILS_ROOT: ./script/../config/.. Application Trace | Framework Trace | Full Trace #{RAILS_ROOT}/app/controllers/deals_controller.rb:27:in `fill_rec_points'' Request Parameters: {"list_item"=>"SoCal"} --- Response Headers: {"cookie"=>[], "Cache-Control"=>"no-cache"} Any interpretation??? Thanks Again!!! -- Posted via http://www.ruby-forum.com/.
Brian V Hughes
2006-Apr-09 17:18 UTC
[Rails] Re: Re: Help With Dependent Drop-Down and @Params
On Apr 9, 2006, at 12:37 PM, David Hughes wrote:> Thanks to everyone for helping so far...Brian, when I tried your > suggestion of params[:deal][:utility] this is the error I get: > > NoMethodError in Deals#fill_rec_points > You have a nil object when you didn''t expect it! > You might have expected an instance of Array. > The error occured while evaluating nil.[] > > Request > Parameters: {"list_item"=>"SoCal"}Right here is where we see what your problem is. For whatever reason, and I''m not sure what that reason is, since I haven''t seen your code, the params object that your controller is getting, doesn''t have a "deal" object... Without a "deal" object, requesting params[:deal] or params["deal"] will return a nil object. This is how Ruby handles hash item access. So, if you then try to reference params[:deal][:utility], you are asking Ruby to return the [:utility] item from a nil object, which it can''t do, so it throws an error. The last line of the error message, before the Parameters list, tells you that you are trying to do something with a nil object. That''s the other big clue in this error. To "fix" this problem, you need to figure out why your form isn''t properly submitting data to your controller when you hit the Submit button. You are clicking on a submit button, aren''t you? -Brian
David Hughes
2006-Apr-09 20:51 UTC
[Rails] Re: Re: Re: Help With Dependent Drop-Down and @Params
> To "fix" this problem, you need to figure out why your form isn''t > properly submitting data to your controller when you hit the Submit > button. You are clicking on a submit button, aren''t you? > > -BrianThanks for the help Brian (had to leave for a bit). Actually I am trying to grab this data while the user is entering information on a new record form, PRIOR to hitting submit. Like I said before, I have had this work in other Rails apps. This select control is located on the _form partial which is embedded in the new.rhtml view of the deals_controller.rb. Could it be that it is not sending the deal hash because the record hasn''t been ''saved'' yet. However, the ''new'' method in the controller calls for Deal.new, so shouldn''t it have a hash already generated for the deal object, with the utility item? My code is in the first post of this thread...tell me if you need more. Thanks...David. -- Posted via http://www.ruby-forum.com/.
On Apr 9, 2006, at 04:51 PM, David Hughes wrote:> My code is in the first post of this thread...tell me if you need > more. > Thanks...David.Actually, I hadn''t read the code very closely the first time, since I was only trying to answer the question of the proper way to refer to things inside the params hash object. However, now that I''ve taken a look at your original post code, the answer jumped out at me. You define your observer as:> <%= observe_field("deal[utility]", > :frequency => 0.25, > :update => "rec_point_list", > :url => {:action => :fill_rec_points}, > :with => "''list_item=''+value") %>That :with tells the JavaScript how to send the value to your fill_rec_points method. You are sending the value through as "list_item", which is fine, but you''re not asking for "list_item" out of the params hash. In fact, the error you posted showed us exactly that:> Application Trace | Framework Trace | Full Trace > #{RAILS_ROOT}/app/controllers/deals_controller.rb:27:in > `fill_rec_points'' > > Request > Parameters: {"list_item"=>"SoCal"}But, since I hadn''t looked at your original code that didn''t click for me when I first saw it. So, you can either reference params [:list_item] (or params["list_item"] if you prefer), or you can modify your observe_field :with to be ":with => "''deal[utility] =''+value", so that you''re current method of referencing params will work... -Brian Application Trace | Framework Trace | Full Trace #{RAILS_ROOT}/app/controllers/deals_controller.rb:27:in `fill_rec_points'' Request Parameters: {"list_item"=>"SoCal"}
> But, since I hadn''t looked at your original code that didn''t click > for me when I first saw it. So, you can either reference params > [:list_item] (or params["list_item"] if you prefer), or you can > modify your observe_field :with to be ":with => "''deal[utility] > =''+value", so that you''re current method of referencing params will > work... > > -BrianHALLELUJAH! It worked like a charm...I knew if someone looked at it they would see something I had overlooked, after pouring over it a hundred times. Brian, I knew you had a good last name for a reason! Sweet!!!!! Thanks dude, you rock...and thank you to everyone else who contributed to this thread. Taking time to help others is what OpenSource and Web 2.0 is all about...what a great time to be alive! Happy Railing! David -- Posted via http://www.ruby-forum.com/.