So i had a boolean attribute in my model which gets interpreted to tinyint(1) in mysql by rails migrations. Now tinyint(1) accepts a range in mysql and i want to change my boolean attribute to an attribute which can accept 3 values(0,1,2). I made the change to the view and when i post the form selecting the selecting the value ''2'', it still gets saved as a ''0''. I checked the params when the post is done and the value of the form element was ''0'' even though i selected ''2''(I am using a dropdown list here). So my question really is, how can i make rails to accept more values without changing the type to something other than tinyint(1)? And why this weirdness? thanks in advance. -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On Jan 9, 11:16 pm, codeinnova <sumangur...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> So my question really is, how can i make rails to accept more values > without changing the type to something other than tinyint(1)? And why > this weirdness?Mysql doesn''t have an actual boolean type so rails usually uses tinyint (1) columns instead. There is a setting inside the mysql_adapter called emulate_booleans which you could try turning off but that would apply to all tables. Fred -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On Jan 9, 6:16 pm, codeinnova <sumangur...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> So i had a boolean attribute in my model which gets interpreted to > tinyint(1) in mysql by rails migrations. Now tinyint(1) accepts a > range in mysql and i want to change my boolean attribute to an > attribute which can accept 3 values(0,1,2). > I made the change to the view and when i post the form selecting the > selecting the value ''2'', it still gets saved as a ''0''. I checked the > params when the post is done and the value of the form element was ''0'' > even though i selected ''2''(I am using a dropdown list here). > So my question really is, how can i make rails to accept more values > without changing the type to something other than tinyint(1)? And why > this weirdness?As others have pointed out, MySQL doesn''t have a straight "boolean" field type, so the tinyint(1) hack is used instead. You''ll either need to turn off emulate_booleans (which may break other stuff) or just change the column type, as the MySQL adapter will detect the current type as :boolean and the AR-generated accessors will wind up casting values as booleans automatically... Not to mention the potential for confusion - imagine you''re another developer, looking at schema.rb. You see a field ''foo'' declared as :boolean, and the interface stuffs ''2'' in there - what''s it supposed to mean? FILE_NOT_FOUND? :) --Matt Jones -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
I second Matt''s point about potential for confusion. A boolean val implies one of two values: true or false. What you''re asking for -- 1 of 3 potential vals -- seems to rule out the use of a boolean to represent that val. So, I''d recommend using some other data type. Jeff On Jan 10, 11:57 am, Matt Jones <al2o...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> On Jan 9, 6:16 pm, codeinnova <sumangur...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > So i had a boolean attribute in my model which gets interpreted to > > tinyint(1) in mysql by rails migrations. Now tinyint(1) accepts a > > range in mysql and i want to change my boolean attribute to an > > attribute which can accept 3 values(0,1,2). > > I made the change to the view and when i post the form selecting the > > selecting the value ''2'', it still gets saved as a ''0''. I checked the > > params when the post is done and the value of the form element was ''0'' > > even though i selected ''2''(I am using a dropdown list here). > > So my question really is, how can i make rails to accept more values > > without changing the type to something other than tinyint(1)? And why > > this weirdness? > > As others have pointed out, MySQL doesn''t have a straight "boolean" > field type, so the tinyint(1) hack is used instead. > > You''ll either need to turn off emulate_booleans (which may break other > stuff) or just change the column type, as the MySQL adapter will > detect the current type as :boolean and the AR-generated accessors > will wind up casting values as booleans automatically... > > Not to mention the potential for confusion - imagine you''re another > developer, looking at schema.rb. You see a field ''foo'' declared > as :boolean, and the interface stuffs ''2'' in there - what''s it > supposed to mean? FILE_NOT_FOUND? :) > > --Matt Jones-- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.