рдХреИрд╕реЗ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рдЕрдзрд┐рдХрд╛рдВрд╢ рд░реЗрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ, рдХреЛрдб рдХреА рдореБрдЦреНрдп рдПрдХрд╛рдЧреНрд░рддрд╛ рдореЙрдбрд▓ рдкрд░ рдЖрддреА рд╣реИред рд╣рд░ рдХреЛрдИ рд╢рд╛рдпрдж рд╕реНрд▓рд┐рдо рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдФрд░ рд╡рд╕рд╛ рдореЙрдбрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдиреЗ рдореЙрдбрд▓ рдореЗрдВ рдЪрдордХрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдХрдо рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдореЗрдВред рдЦреИрд░, рдпрд╣ рд╕рд░рд╛рд╣рдиреАрдп рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореЙрдбрд▓ рдХреЛ рдореЛрдЯрд╛ рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдореЗрдВ, рдХрдИ рдЕрдХреНрд╕рд░ DRY рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ - рди (рдХрдордмрдЦреНрдд) рдЦреБрдж рдХреЛ рджреЛрд╣рд░рд╛рдПрдВред

рдореИрдВ рдореЙрдбрд▓ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдордЫрд▓реА рдЦрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛, рдФрд░ DRY рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рднреВрд▓реВрдВрдЧрд╛ред



рддреЛ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬреЛ рдореЙрдбрд▓ рд╣реИ рд╡рд╣ рдХрдЯ рдХреНрд▓рд╛рд╕ рд╣реИред рдХрд┐рд╕реА рднреА рдХрдЯ рдХреНрд▓рд╛рд╕ рдХреА рддрд░рд╣, рдПрдХ рдореЙрдбрд▓ рдореЗрдВ рддреАрди рдЪреАрдЬреЗрдВ рд╣реЛрддреА рд╣реИрдВ:

1) рдЙрджрд╛рд╣рд░рдг рдХреЗ рддрд░реАрдХреЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛

class User < ActiveRecord::Base def name [ first_name, last_name ].filter(&:presence).compact.map(&:strip) * ' ' end end 


2) рд╡рд░реНрдЧ рд╡рд┐рдзрд┐ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ

 class User < ActiveRecord::Base def self.find_old where('created_at < ?', 1.year.ago).all end end 


3) "рдХреНрд▓рд╛рд╕" рдХреЛрдб

 class User < ActiveRecord::Base attr_accessor :foo has_many :authentications, :dependent => :destroy has_many :invitees, :class_name => 'User', :as => :invited_by delegate :city, :country, :to => :location attr_accessible :admin, :banned, :as => :admin mount_uploader :userpic, UserPicUploader scope :admin, where(:admin => true) validates :username, :uniqueness => true, :format => /^[az][az\d_-]+$/, :length => { :within => 3..20 }, :exclusion => { :in => USERNAME_EXCLUSION } end 


рдПрдХ рдореЙрдбрд▓ рдХреЛ DRY рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛, рдЬреИрд╕реЗ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд░реВрдмреА рдореЗрдВ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рд╡рд░реНрдЧ, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рджреЛрд╣рд░рд╛рдП рдЧрдП рднрд╛рдЧреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдирд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореЙрдбреНрдпреВрд▓ рди рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИрдВред рдХрднреА-рдХрднреА рдпрд╣ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдмрд╕ рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЛрдб рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдХрдЪрд░рд╛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдирд╛ рд╣реИ рддрд╛рдХрд┐ рдореЙрдбрд▓ рд╕рд╛рдл рджрд┐рдЦреЗ рдФрд░ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдХрдЪрд░рд╛ рдХреЗ рдЯрди рдиреАрдЪреЗ рд╕реЗ рднреНрд░рдорд┐рдд рди рд╣реЛрдВред

рддрд░реАрдХреЛрдВ


рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рддрд░реАрдХреЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИ:
 # user_stuff.rb module UserStuff def name [ first_name, last_name ].filter(&:presence).compact.map(&:strip) * ' ' end end # user.rb class User < ActiveRecord::Base include UserStuff end 


рдХрдХреНрд╖рд╛ рдХреЗ рддрд░реАрдХреЗ рдереЛрдбрд╝реЗ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИрдВред рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:
 # user_stuff.rb module UserStuff def self.find_old where('created_at < ?', 1.year.ago).all end end # user.rb class User < ActiveRecord::Base include UserStuff end 

рдпрд╣рд╛рдВ рд╣рдо find_old рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП find_old рдкрджреНрдзрддрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдореЙрдбрд▓ рдореЗрдВ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдРрд╕рд╛ рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
 # user_stuff.rb module UserStuff def find_old where('created_at < ?', 1.year.ago).all end end # user.rb class User < ActiveRecord::Base extend UserStuff # ,  include,  extend end 


рдПрдХ рд╕рд╛рде, рдЗрдВрдЯреЗрдиреНрд╕ рдФрд░ рдХреНрд▓рд╛рд╕ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:
 # user_stuff.rb module UserStuff module InstanceMethods def name [ first_name, last_name ].filter(&:presence).compact.map(&:strip) * ' ' end end module ClassMethods def find_old where('created_at < ?', 1.year.ago).all end end end # user.rb class User < ActiveRecord::Base include UserStuff::InstanceMethods extend UserStuff::ClassMethods end 


рдХрдХреНрд╖рд╛ рдХреЛрдб


рдЕрдирд╕реБрд▓рдЭреЗ рд╕рд╡рд╛рд▓ "рд╡рд░реНрдЧ" рдХреЛрдб рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░ рд╡рд╣ рд╕рд┐рд░реНрдл рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рдмрд╛рд░ DRYing рдХреА рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдШреЛрд╖рд┐рдд рд╡рд░реНрдЧ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореЙрдбрд▓) рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрдВрджрд░ рдЗрд╕реЗ рд▓рд┐рдЦрдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ - рдпрд╣ рддреБрд░рдВрдд рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛ рдФрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдЯреВрдЯ рдЬрд╛рдПрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдореЙрдбреНрдпреВрд▓ рд╕рддреНрдпрд╛рдкрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ, рди рд╣реА рдХрдИ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдФрд░ рди рд╣реА has_many рдЖрджрд┐ рдХреЗ рдмрд╛рд░реЗ has_many ред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЛрдб рдХреЛ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рддрдм рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛ рдЬрдм рдпрд╣ рдореЙрдбреНрдпреВрд▓ рдореЙрдбрд▓ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд░реВрдмреА рдореЗрдВ рдпрд╣ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред

рдореЙрдбреНрдпреВрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рд╕рдореНрдорд┐рд▓рд┐рдд рд╡рд┐рдзрд┐ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕реЗ рд╣рд░ рдмрд╛рд░ рд╣рдо рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рддрд╣рдд рдХреЛрдб рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣:
 module UserValidations def self.included(base) # base    тАФ ,   . base.instance_eval do #     base #      validates :username, :uniqueness => true, :format => /^[az][az\d_-]+$/, :length => { :within => 3..20 }, :exclusion => { :in => USERNAME_EXCLUSION } validates :gender, :allow_blank => true, :inclusion => { :in => %w(mf) } end end end 


рдЕрдм рд╕рднреА рд╕рддреНрдпрд╛рдкрди рдХреЛрдб рдХреЛ рдЙрд╕ рд╕рдордп рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрдм рддрдХ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЪреБрдкрдЪрд╛рдк рд▓реЗрдЯреЗ рд░рд╣реЗрдВрдЧреЗ рдФрд░ рддрдм рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдЬрдм рддрдХ рд╣рдо рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдирд╣реАрдВ рдХрд░ рджреЗрддреЗред

рд╕рднреА рдПрдХ рдЭреБрдВрдб рдореЗрдВ


рдЕрдм рдпрд╣ рдХреИрд╕реЗ рд╡рд┐рдзрд┐ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдКрдкрд░ рдереЗ? рдФрд░ рдпрд╣рд╛рдБ рд╣реИ рдХреИрд╕реЗ:

 # user_stuff.rb module UserStuff def self.included(base) #     base.extend ClassMethods #    # Module#include тАФ  .          #      base.include(InstanceMethods),    : base.send :include, InstanceMethods #       base.instance_eval do validates :gender, :presence => true end end #   module ClassMethods def find_old where('created_at < ?', 1.year.ago).all end end # - module InstanceMethods def name [ first_name, last_name ].filter(&:presence).compact.map(&:strip) * ' ' end end end # user.rb class User < ActiveRecord::Base include UserStuff end 


рдХреБрд▓ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдореЙрдбрд▓ рдХреЗ рдХрд┐рд╕реА рднреА рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдЬрдЯрд┐рд▓ рдЯреБрдХрдбрд╝реЗ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЖрдкрдХреЛ рдХрд┐рддрдиреА рдмрд╛рд░ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рдпрд╣ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдб рдмрджрд╕реВрд░рдд рд╣реИ рдФрд░ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЗрди рдЕрдВрддрд╣реАрди рд╢рд╛рдорд┐рд▓ / рднреЗрдЬ: рд╢рд╛рдорд┐рд▓ / рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ рднреНрд░рдорд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдк рд╕реБрдВрджрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ!


рд░реВрдмреА рд╕рдореБрджрд╛рдп рдореЗрдВ, рдХреЛрдб рдХреА рдкрдардиреАрдпрддрд╛ рдФрд░ рд╕реБрдВрджрд░рддрд╛ рдХреА рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рд╕рд╛рде рд╣реА рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд - рдХреБрдЫ рд╕рд░рд▓ рдФрд░ рд╕реБрдВрджрд░ рдПрдкреАрдЖрдИ / рдбреАрдПрд╕рдПрд▓ рдХреЗ рдкреАрдЫреЗ рдЬрдЯрд┐рд▓ рдЪреАрдЬреЛрдВ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрджрд┐ рдЖрдк RoR рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рддреБрд░рдВрдд рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓рдЧрднрдЧ рд╣рд░ рдЬрдЧрд╣ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдмреЗрд╢рдХ, рд▓реЛрдЧреЛрдВ рдиреЗ рдЕрдкрдиреЗ рдЬреАрд╡рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ ActiveSupport::Concern рд╕рд╛рде рдЖрдпрд╛ред

рдЗрд╕ ActiveSupport::Concern рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ ActiveSupport::Concern рдХрд░рдирд╛ ActiveSupport::Concern рд╣рдорд╛рд░рд╛ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 module UserStuff extend ActiveSupport::Concern included do validates :gender, :presence => true end #   module ClassMethods def find_old where('created_at < ?', 1.year.ago).all end end # - module InstanceMethods def name [ first_name, last_name ].filter(&:presence).compact.map(&:strip) * ' ' end end end 


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рдХреЛрдб рдЗрд╕ рд╕рд╣рд╛рдпрдХ рдХреА рдПрдХрдорд╛рддреНрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реИред рдЙрд╕рдХреЗ рдкрд╛рд╕ рдЕрднреА рднреА рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдХрд┐рд╕реА рджрд┐рди рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрд▓рдЧ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВред рдЬреЛ рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЙрд╕реЗ lib/active_support/concern.rb рдореЗрдВ рдХрдЪреНрдЪреЗ active_support рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдиреЗ рджреЗрдВред рдЖрд░рдмреА рдХреЛрдб рдЙрджрд╛рд╣рд░рдгреЛрдВ рдФрд░ рд╕рднреА рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╣реА рд╢рд╛рдВрдд рдФрд░ рд╡рдЬрдирджрд╛рд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╣реИрдВред

рдЗрд╕реЗ рдХрд╣рд╛рдВ рд░рдЦрд╛ рдЬрд╛рдП?


рдПрдХ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рддреБрд░рдВрдд рдореБрдарднреЗрдбрд╝ рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдЕрдкрдиреЗ рдореЙрдбрд▓ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдлрд╛рдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ - рдХреЛрдб рдХрд╣рд╛рдВ рд░рдЦрд╛ рдЬрд╛рдП рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд╛рдо рдХреИрд╕реЗ рджрд┐рдпрд╛ рдЬрд╛рдП?

рд╕рдВрднрд╡рдд: рдХреЛрдИ рдЕрд╕рдВрджрд┐рдЧреНрдз рд░рд╛рдп рдирд╣реАрдВ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдЦреБрдж рдХреЗ рд▓рд┐рдП рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рд╣реВрдВ:
 # lib/models/validations.rb module Models module Validations #   c     end end # lib/models/user/validation.rb module Models module User module Validations #    User end end end # app/models/user.rb class User < ActiveRecord::Base include Models::Validations include Models::User::Validations end 


рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдорд╛рдпрдиреЗ рд░рдЦрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЖрдкрдХреЛ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рд╕рднреА рдХреЛрдб рд▓реЛрдб рдирд╣реАрдВ рдХрд░рдиреЗ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рд░реЗрд▓ рдСрдЯреЛрд▓реИрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ - рдПрдХ рдРрд╕рд╛ рддрдВрддреНрд░ рдЬрдм рдпрд╣ рдПрдХ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕реНрдерд┐рд░ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ Models::User::Validations models/user/validations.rb , рдкрд╣рд▓реЗ models/user/validations.rb рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред , рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА, рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ NameError рдЕрдкрд╡рд╛рдж рд╕реЗ NameError рдФрд░ рдлреЗрдВрдХ рджреЗрдВред

рдирд┐рд╖реНрдХрд░реНрд╖


рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЕрдкрдиреЗ рд▓рд┐рдП рд▓реЗрдЦ рд╕реЗ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдирд┐рдХрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдпрд╣ рдПрдХ рдбреЗрдврд╝ рд╣рдЬрд╛рд░ рд╕рдордп рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрдордХрджрд╛рд░-рдкрдардиреАрдп рдХреЛрдб рдФрд░ рдореЙрдбрд▓ рд╕реЗ рдереЛрдбрд╝рд╛ рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдкрдбреЗрдЯ:
рдлрд┐рд░ рдирд┐рдЬреАрдХрд░рдг рдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдореИрдВ рдХреЛрдб рдореЗрдВ рдЧреВрдВрдЧрд╛ рдерд╛, рдЬреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЪрд┐рдВрддрд╛ рдХреЗ, instance_eval , рдореИрдВ рднреВрд▓ рдЧрдпрд╛ред рдХреЛрдб рд╕рд╣реА рдХрд┐рдпрд╛ред рдордирдорд░реНрдЬреА рдХреЗ рд▓рд┐рдП рдХрд░реНрдо рдореЗрдВ рдХреЙрдорд░реЗрдб рдкреНрд▓рд╕ред

Source: https://habr.com/ru/post/In125822/


All Articles