Hi all, I am trying to do a little checking before a user profile is created and see if some fields are blank. If they, that''s OK, I just need to set them to a dummy value if they are, not blank. The reason for this is that later on on another profile page they can change the value if the user wants through a edit_in_place helper, but that doesn''t do much good if the fields are blank. I have this validates_each, and while the method gets executed correctly, I need it to set some of the variables for the User object which this method is a part of, but I am unsure on how to do that. This is what I have tried but it doesn''t work. validates_each :company :on => :save do|record, attr, value| if value.blank? value = "Click to Edit" self.attr = value end end Any sujestions? Thanks, -S -- 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 -~----------~----~----~----~------~----~------~--~---
The example Ryan Bates uses looks like: validates_presence_of :state, :if => :in_us? def in_us? country == ''US'' end have a look at this if you get a minute -> http://railscasts.com/episodes/41 I''m sure you can piece together a conditional validation from what he explains in the webcast. On Feb 11, 9:56 am, Shandy Nantz <rails-mailing-l...-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> Hi all, > > I am trying to do a little checking before a user profile is created and > see if some fields are blank. If they, that''s OK, I just need to set > them to a dummy value if they are, not blank. The reason for this is > that later on on another profile page they can change the value if the > user wants through a edit_in_place helper, but that doesn''t do much good > if the fields are blank. I have this validates_each, and while the > method gets executed correctly, I need it to set some of the variables > for the User object which this method is a part of, but I am unsure on > how to do that. This is what I have tried but it doesn''t work. > > validates_each :company :on => :save do|record, attr, value| > if value.blank? > value = "Click to Edit" > self.attr = value > end > end > > Any sujestions? Thanks, > > -S > -- > Posted viahttp://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 -~----------~----~----~----~------~----~------~--~---
ebrad wrote:> The example Ryan Bates uses looks like: > > validates_presence_of :state, :if => :in_us? > > def in_us? > country == ''US'' > endThe problem with that is that I have many, many fields that I need to check which is why the way that I have I like so much, because it looped through each field in just a few lines of code. The way that I had it before was a huge method with a bunch of if''s checking to see which fields were blank - it was sloppy and ugly, which is why I tried to find a better way to do it. The problem with the way that I have now is that I can''t set each field to another via this validation. Thanks, -S -- 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 -~----------~----~----~----~------~----~------~--~---
@Shandy: You only want to use the validates_xxx methods for validation (error checking), not for assignment. The simplest route to go might be to alter your db fields and provide default values for the attributes in question. You should do that through a migration so that you don''t lose visibility to the assignments in your code base. Otherwise, consider something like this: class MyModel DEFAULTS = {:attr1=>default_1, :attr2=>default_2, ... } before_create :set_defaults ... private def set_defaults DEFAULTS.each do |attr, default_value| self.send("#{attr}=", default_value) unless self.send(attr).blank? end end end Defaults is a hash of attributes (the keys) and their default values. You iterate over that and the loop assigns the default value if it finds the attribute blank. On Feb 11, 4:03 pm, Shandy Nantz <rails-mailing-l...-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> ebrad wrote: > > The example Ryan Bates uses looks like: > > > validates_presence_of :state, :if => :in_us? > > > def in_us? > > country == ''US'' > > end > > The problem with that is that I have many, many fields that I need to > check which is why the way that I have I like so much, because it looped > through each field in just a few lines of code. The way that I had it > before was a huge method with a bunch of if''s checking to see which > fields were blank - it was sloppy and ugly, which is why I tried to find > a better way to do it. The problem with the way that I have now is that > I can''t set each field to another via this validation. Thanks, > > -S > > -- > Posted viahttp://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 -~----------~----~----~----~------~----~------~--~---
AndyV wrote:> The simplest route to go might > be to alter your db fields and provide default values for the > attributes in question. You should do that through a migration so > that you don''t lose visibility to the assignments in your code base.That is what I ended up doing. It just seemed like the capability was there to do it the way I was trying but maybe not. Thanks for the help, -S -- 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 -~----------~----~----~----~------~----~------~--~---
AndyV wrote:> class MyModel > DEFAULTS = {:attr1=>default_1, :attr2=>default_2, ... } > before_create :set_defaults > ... > private > def set_defaults > DEFAULTS.each do |attr, default_value| > self.send("#{attr}=", default_value) unless > self.send(attr).blank? > end > end > endI tried to get this to work and I''m not sure what I am doing wrong but it doesn''t. Everything prints out ok but nothing gets set. I am saying before_save, that''s is the only difference in code. Any suggestions of what I am doing wrong? Thx, -S -- 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 -~----------~----~----~----~------~----~------~--~---
AndyV wrote:> class MyModel > DEFAULTS = {:attr1=>default_1, :attr2=>default_2, ... } > before_create :set_defaults > ... > private > def set_defaults > DEFAULTS.each do |attr, default_value| > self.send("#{attr}=", default_value) unless > self.send(attr).blank? > end > end > endI answered my own question. I changed the unless self.send(attr).blank? part. I did this: def set_defaults DEFAULTS.each do |attr, default_value| if self.send(attr).blank? self.send("#{attr}=", default_value) puts attr puts default_value end end end But thanks for the help Andy, this is exactly what I was looking for. -S -- 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 -~----------~----~----~----~------~----~------~--~---
Sorry about that. In my mind I was thinking about assigning the values ahead of time so they''d be present in the form. As you figured out, I should have used an ''if'' instead of an ''unless''. Good catch! On Feb 15, 3:36 pm, Shandy Nantz <rails-mailing-l...-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> AndyV wrote: > > class MyModel > > DEFAULTS = {:attr1=>default_1, :attr2=>default_2, ... } > > before_create :set_defaults > > ... > > private > > def set_defaults > > DEFAULTS.each do |attr, default_value| > > self.send("#{attr}=", default_value) unless > > self.send(attr).blank? > > end > > end > > end > > I answered my own question. I changed the unless self.send(attr).blank? > part. I did this: > > def set_defaults > DEFAULTS.each do |attr, default_value| > if self.send(attr).blank? > self.send("#{attr}=", default_value) > puts attr > puts default_value > end > end > end > > But thanks for the help Andy, this is exactly what I was looking for. > > -S > -- > Posted viahttp://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 -~----------~----~----~----~------~----~------~--~---