Hi, Here is my little question : I''d like to have an attribute in my model class wich is always at true, except when I declare it at false. For the moment I have declared my accessor with attr_accessor :allow_validation and put a default value by redifining initialize : def initialize (params=nil) super(params) @allow_validation = true end Of course, I can now have objects constructed without calling initialize, for example if the object is created using the find method of the parent class. Is there a clean way to do thaht without repeating myself and redifining all methods from the parent class tht could create an object of thus type ? Thanks in advance, Nicolas -- 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 -~----------~----~----~----~------~----~------~--~---
On 3 October 2006 15:58, Nicolas Noé wrote:> Hi, > > Here is my little question : > > I''d like to have an attribute in my model class wich is always at true, > except when I declare it at false. For the moment I have declared my > accessor with > > attr_accessor :allow_validation > > and put a default value by redifining initialize : > > def initialize (params=nil) > super(params) > @allow_validation = true > end > > Of course, I can now have objects constructed without calling > initialize, for example if the object is created using the find method > of the parent class. Is there a clean way to do thaht without repeating > myself and redifining all methods from the parent class tht could create > an object of thus type ?If you want to run some code after the record was found in DB, take a look at after_find and after_initialize callbacks. class MyClass def initialize (params=nil) super(params) @allow_validation = true end def after_initialize @allow_validation = true end end But I would recommend to use some other method to avoid validation. --~--~---------~--~----~------------~-------~--~----~ 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@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk -~----------~----~----~----~------~----~------~--~---
Maxim Kulkin wrote:> On 3 October 2006 15:58, Nicolas Noé wrote: >> and put a default value by redifining initialize : >> an object of thus type ? > If you want to run some code after the record was found in DB, take a > look at > after_find and after_initialize callbacks. > > class MyClass > def initialize (params=nil) > super(params) > @allow_validation = true > end > > def after_initialize > @allow_validation = true > end > end > > But I would recommend to use some other method to avoid validation.Thanks a lot ! What would you recommend for avoiding validation ? In fact, I have a User model, and 3 actions : 1) Add an user : I have to perform all validations of a model 2) Change password : I have to validate password only, but I can execute all validations : the others will succeed because the User is already valid (it was checked when adding) 3) Edit a user : this action is special : I edit the user, except the field username (I don''t want user to edit it) and password (changing password is done by action 2) ). The problem is with this third action : I just cannot redisplay password in a hidden or non editable field, because it''s stored as a hash in the database. I first created the User class with the validation for 3, and then created a subclass that also perform validation for 1 and 2. That worked, but the code was quite long for a so simple problem, and I had some problems when using ruby-gettext to translate model error messages. That''s why I wanted to solve my problem by having only one user class, that performs alll validations excepts if we specify @user.allow_validation = false in the controller. What do you suggest for that ? (I''m new in rails, and find it great. But not so easy to find the "good way" to solve a problem). Thanks Nicolas -- 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@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk -~----------~----~----~----~------~----~------~--~---
On 3 October 2006 18:42, Nicolas Noé wrote:> The problem is with this third action : I just cannot redisplay password > in a hidden or non editable field, because it''s stored as a hash in the > database. > > What do you suggest for that ? (I''m new in rails, and find it great. But > not so easy to find the "good way" to solve a problem).Take a look at Acts As Authenticated plugin and Login Engine. Those should contain ready solutions for that problem. --~--~---------~--~----~------------~-------~--~----~ 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@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk -~----------~----~----~----~------~----~------~--~---