Hi, I often need yes/no drop down menus - DRY ? Okay, so def select_yes_no(object, method, default = true) return select(object, method, {''Yes'' => true, ''No'' => false}, :selected => default ) end It works fine for a new record but the default value is always selected, even when editing an old record How to use select(), have a default choice selected when new_record? and have the record value when not new_record? 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 -~----------~----~----~----~------~----~------~--~---
nuno wrote:> Hi, I often need yes/no drop down menus - DRY ? Okay, so > def select_yes_no(object, method, default = true) > return select(object, method, {''Yes'' => true, ''No'' => false}, > :selected => default ) > end > > It works fine for a new record but the default value is always selected, > even when editing an old record > > How to use select(), have a default choice selected when new_record? and > have the record value when not new_record? > > Thank youWhere do you have this code - in a helper? The select helper will set the starting value of the dropdown according to the value of that field in an @object instance variable. It would appear that where the select helper is getting called the @object object doesn''t exist. c. -- 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 -~----------~----~----~----~------~----~------~--~---
Cayce Balara wrote:> nuno wrote: >> Hi, I often need yes/no drop down menus - DRY ? Okay, so >> def select_yes_no(object, method, default = true) >> return select(object, method, {''Yes'' => true, ''No'' => false}, >> :selected => default ) >> end >> >> It works fine for a new record but the default value is always selected, >> even when editing an old record >> >> How to use select(), have a default choice selected when new_record? and >> have the record value when not new_record? >> >> Thank you > > Where do you have this code - in a helper? > > The select helper will set the starting value of the dropdown according > to the value of that field in an @object instance variable. It would > appear that where the select helper is getting called the @object object > doesn''t exist. >object and method are passed as String parameters, as in the api select() method so it should work the same way... In fact the problem is the same when I try to use :selected from a view. eg <%= select("move_#{suffix}", ''precision'', Move.precisions.invert, {:selected => :precise }) %> The default is always selected, no matter if move_#{suffix} is a new record or not... So, I''m still finding for a solution to have :selected enabled ONLY for new record without polluting the view with many ''if'' statements Thanks -- 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 -~----------~----~----~----~------~----~------~--~---
nuno wrote:> > object and method are passed as String parameters, as in the api > select() method so it should work the same way... > > In fact the problem is the same when I try to use :selected from a view. > > eg > <%= select("move_#{suffix}", ''precision'', Move.precisions.invert, > {:selected => :precise }) %> > > The default is always selected, no matter if move_#{suffix} is a new > record or not... > > So, I''m still finding for a solution to have :selected enabled ONLY for > new record without polluting the view with many ''if'' statements > > ThanksBut do you have an @move_#{suffix} instance variable defined? A simpler example... controller ************ def edit @widget = Widget.find(1) end edit view ************ <%= select(''widget'',''flag'',[[''Yes'',''Y''],[''No'',''N'']]) %> Since your select() helper object parm is ''widget'', Rails looks for an instance variable @widget, and maps the value in @widget.flag to the selected value of the dropdown. If I take out the @widget= line in my controller, then the selected value will always be the default. So, for example, if in one case {suffix} is equal to ''3'', then: <%= select("move_#{suffix}", ''precision'', Move.precisions.invert %> is going to be looking for an instance variable @move_3 which is a Move object. If it exists, then the value in @move_3.precision will be selected; if it doesn''t then the default is selected. c. -- 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 -~----------~----~----~----~------~----~------~--~---
Cayce Balara wrote:> nuno wrote:>> So, I''m still finding for a solution to have :selected enabled ONLY for >> new record without polluting the view with many ''if'' statements >> >> Thanks > > But do you have an @move_#{suffix} instance variable defined? >The "edit" action of the "movements" controller generate two instances with class instance scope : @move_dep and @move_arr Then, the edit.rhtml view is rendered which renders the _editdetails.rhtml partial twice because the @move_dep and @move_arr must be treated at the same time (move_arr is an arrival and move_dep is a departure), so I need to display them both on screen While rendering the partial @move_dep and @move_arr ARE defined> > So, for example, if in one case {suffix} is equal to ''3'', then: > > <%= select("move_#{suffix}", ''precision'', Move.precisions.invert %> > > is going to be looking for an instance variable @move_3 which is a Move > object. If it exists, then the value in @move_3.precision will be > selected; if it doesn''t then the default is selected. >But how is the default value selected without any :selected parameter (which you don''t use in your example) ? There is something weird, I must be missing something or doing something wrong -- 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 -~----------~----~----~----~------~----~------~--~---
I forgot to say that suffix is defined to and passed as a local to the partial -- 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 -~----------~----~----~----~------~----~------~--~---
nuno wrote:> I forgot to say that suffix is defined to and passed as a local to the > partialSo, suffix can be "dep" or can be "arr"? In that case, I apologize - I''m stumped - from here it looks like that should be working for you. The only other thing I can think of is that you have to make sure the current value of @move_dep.precision actually does match one of the options that you give to the select() helper in the third variable. For instance, if the value of @move_dep.precision is "YES", but the values of your options in the select() helper are "Y" and "N", then it''s never going to match and you''ll always get the default value.> But how is the default value selected without any :selected parameter > which you don''t use in your example) ?That''s how Rails works. If there is an instance variable @move_dep with a .precision method, then select(''move_dep'', ''precision'', blah-blah) will create a <select> tag with one or more <option> tags (the blah-blah), and the <option> tag whose value matches the current value of @move_dep.precision is going to get marked automatically with the "selected" attribute. c. c. -- 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 -~----------~----~----~----~------~----~------~--~---
Cayce Balara wrote:> > That''s how Rails works. If there is an instance variable @move_dep with > a .precision method, then select(''move_dep'', ''precision'', blah-blah) > will create a <select> tag with one or more <option> tags (the > blah-blah), and the <option> tag whose value matches the current value > of @move_dep.precision is going to get marked automatically with the > "selected" attribute. >I don''t understand your point of view : for me, there is always an instance because movement_XXX is equal to Movement.find or Movement.new depending if we''re creating or modifying the record... -- 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 -~----------~----~----~----~------~----~------~--~---
nuno wrote:> Cayce Balara wrote: > >> >> That''s how Rails works. If there is an instance variable @move_dep with >> a .precision method, then select(''move_dep'', ''precision'', blah-blah) >> will create a <select> tag with one or more <option> tags (the >> blah-blah), and the <option> tag whose value matches the current value >> of @move_dep.precision is going to get marked automatically with the >> "selected" attribute. >> > > I don''t understand your point of view : for me, there is always an > instance because movement_XXX is equal to Movement.find or Movement.new > depending if we''re creating or modifying the record...Is it "move" or "movement" (you changed in this last post)? I notice something interesting, reading back, that might be the issue... <%= select("move_#{suffix}", ''precision'', Move.precisions.invert %> Since you are using "Move.precisions" here I would assume that you have Move and Precision models, and you have them associated. Is the field in your moves table maybe "precision_id" instead of "precision"? If that is the case, then your select might should look like this instead: <%= select("move_#{suffix}", ''precision_id'', Move.precisions.invert %> And if all this is the case, then that is also the reason you are not defaulting correctly - Rails is trying to get the value of Move.precision when that doesn''t really exist, it''s Move.precision_id, so without a value it''s going with the default. This is about as far as I can get without seeing your code. I''d be happy to take a look if you want to post up the code from your controller action method and the view itself where you are trying to use the select helper and we can probably make more progress. c. -- 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 -~----------~----~----~----~------~----~------~--~---