I have been working for a whole week on this problem without success, so I feel that its now time to give up and ask for some help since it seems that I am obvisouly missing something... all I want to do is having a form with a dropdown menu. When the user select a value from the drop down and sumit the value, this value must be the new ''active_client''. Technicaly, when the form is submited from the list page, it calls the change_active_client action that take care of changing the client''s ID in the session then returns the control to the list action. My problem is that when I try to output the value stored in the session, I get anything but what I expected... What am I missing? the simplified version of my code goes like this: ------START_CONTROLER------- class SpecificController < ApplicationController def list @active_client = session[:active_client] @clients = Client.find_all.collect {|c| [ c.name, c.id ] } end def change_active_client session[:active_client] = params[:client] redirect_to(:action => "list") end end ------END_CONTROLER------- ------START_VIEW----------- <%= form_tag (:action => "change_active_client")%> <%= select(:client, :id, @clients) %> <input type="submit" value="Change" /> <%= end_form_tag%> content of the session: <%=h(session[:active_client])%> <br/> content of the @Active_client: <%=h(@active_client)%> ------END_VIEW--------------- ------ABOUT_THE_MODEL------ its a basic table, with ID as a auto increment int and name as a varchar -----THE OUTPUT OF ABOVE CODE--- something like: id1 or id2, id3, etc... I want to be able to extract the name of the client but cant... This thing is driving me nuts, especially since I am sure this is something obvious that I am missing! Thx! -- Posted via http://www.ruby-forum.com/.
Alain wrote: <snip>> -----THE OUTPUT OF ABOVE CODE--- > something like: id1 or id2, id3, etc... I want to be able to extract the > name of the client but cant...You''ll need to do a Client.find() somewhere to turn the id you get back from the select box into a Client object. -- Alex
> You''ll need to do a Client.find() somewhere to turn the id you get back > from the select box into a Client object.Thx Alex. I changed the action change_active_client for this: def change_active_client session[:active_client] = Client.find(params[:client]) redirect_to(:action => "list") end when I look at it, it seems right: when the form is submited, we get the ID from the client, then look for the row with that ID and assign it to :active_client in the session. Unfortunaly, it doesnt work, I get this message: Unknown key(s): id It seems like the Client.find() method cant extract the ID from the session... could the problem be with how I created the select box? Thx! -- Posted via http://www.ruby-forum.com/.
I want to use Capistrano w/git, and while I was reading the source for the other scm adapters it occurred to me maybe somebody has done this already? Thanks! Nate
Hi Alain, I still real new at this, but I believe you''ll see in the Parameters section of the error message you''re getting that your form is returning a hash of hashes rather than a simple hash. I think if you change your current Client.find(..) to Client.find(params[:client][:id]) you''ll get what you need. Actually, I think it will probably work with session[:active_client] = params[:client][:id], but I''m not experienced with the use of the .collect. I''d be real interested, so I hope you''ll let us know. hth, Bill Alain wrote:> I changed the action change_active_client for this: > > def change_active_client > session[:active_client] = Client.find(params[:client]) > redirect_to(:action => "list") > end > > when I look at it, it seems right: when the form is submited, we get the > ID from the client, then look for the row with that ID and assign it to > :active_client in the session. Unfortunaly, it doesnt work, I get this > message: > > Unknown key(s): id > > It seems like the Client.find() method cant extract the ID from the > session... could the problem be with how I created the select box?
Hi Bill, thank you very much! You solved the problem! I replaced the Client.find() for Client.find(params[:client][:id]) and it fixed the problem! Your other option: session[:active_client] = params[:client][:id] did not work. I think I will reread the documentation of .collect to make sure I understand what I did wrong... The only thing is that I cant figure out how to have the updated page have the correct value from the select field selected. Right now, it resets itself to the first value everytime I return to the page. Thanks! -- Posted via http://www.ruby-forum.com/.