рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдХреБрдЫ рд╕рдордп рдмрд╛рдж, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкреНрд░рддрд┐рдмрдВрдз рдФрд░ рдЖрд╡реЗрджрди рдореЗрдВ рдорд╛рдиреНрдпрддрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдЖрдкрдХреА рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдВ рд╣реИрдВред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рд╕рдордЭрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдХреИрд╕реЗ gem
database_consistency рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧреАред
рд╣рдо рджреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддреЗ рд╣реИрдВред
ActiveRecord рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдирдореВрдирд╛ рдХреЛрдбред
рдкрд╣рд▓реА рд╕реНрдерд┐рддрд┐
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╣реИ рдЬреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЧрдИ рд╣реИ:
create_table :users do |t| t.string :name end
рдФрд░ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд:
class User < ApplicationRecord validates :name, presence: true end
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╕рддреНрдпрд╛рдкрди рдХреЛ рддрд░реАрдХреЛрдВ рдХреА рддрд░рд╣ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
save(validate: false)
рдФрд░, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ
NULL рдорд╛рди рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдк рдирд╣реАрдВ рдЪрд╛рд╣реЗрдВрдЧреЗ рдХрд┐ рдРрд╕рд╛ рд╣реЛ (рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдорд╛рдиреНрдпрддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХреА рд╣реИ)ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рддрд┐рдмрдВрдз рд░рдЦрдирд╛ рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реЛрдЧрд╛ред
create_table :users do |t| t.string :name, null: false end
рджреВрд╕рд░реА рд╕реНрдерд┐рддрд┐ (рд░рд┐рд╡рд░реНрд╕)
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╣реИ рдЬреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЧрдИ рд╣реИ:
create_table :users do |t| t.string :name, null: false end
рдФрд░ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд:
class User < ApplicationRecord validates :name end
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ,
valid?
рдЙрди рдЕрднрд┐рд▓реЗрдЦреЛрдВ рдХреЗ рд▓рд┐рдП
true
рд╡рд╛рдкрд╕ рдЖрдПрдЧрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рд╕рд╣реЗрдЬрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдПрдХ рд╕реЗ рдХрдИ SQL рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рдЕрдВрдд рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд▓реМрдЯрд╛рдПрдЧрд╛, рдЬрдмрдХрд┐ рдкреВрд░реЗ рд▓реЗрди-рджреЗрди рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛ред рдпреЗ рд╕рднреА рдЬреЛрдбрд╝рддреЛрдбрд╝ рдЕрдХреНрд╖рдо рд╣реИрдВ рдФрд░
presence: true
рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
presence: true
рд╕рддреНрдпрд╛рдкрдиред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдкрдХреЛ рдЗрд╕ рд╕рддреНрдпрд╛рдкрди рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореЗрд░реЗ рд╕рд╛рдордиреЗ рдпрд╣ рд╕рд╡рд╛рд▓ рдЖрдпрд╛ рдХрд┐ рдРрд╕реЗ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдЦреЛрдЬрд╛ рдЬрд╛рдП?
рдореИрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд░рддреНрди рдбреЗрдЯрд╛рдмреЗрд╕_рд╕рдВрд╕рдж рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВред рдлрд┐рд▓рд╣рд╛рд▓, рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИред рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдмреЛрдирд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рд╡рд╣ рдЖрдкрдХреЛ рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рднреА рдмрддрд╛рдПрдЧрд╛ рдЬрд╣рд╛рдВ рдЧреИрд░-рд╢реВрдиреНрдп рдкреНрд░рддрд┐рдмрдВрдз рдХреЗ рд╕рд╛рде рдПрдХ рдХреЙрд▓рдо рдореЗрдВ
NULL рдорд╛рди рдХреЗ рд╕рд╛рде рд░рд┐рдХреЙрд░реНрдб рд╕рд╣реЗрдЬрдирд╛ рд╕рдВрднрд╡ рд╣реИред
рдХреБрдЫ рдкреНрд░рд╢реНрди рдЦреБрд▓реЗ рд░рд╣рддреЗ рд╣реИрдВ:
- рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдХреНрдпрд╛ рдЕрд╡рд╕рд░ рд╣реИрдВ?
- рдХреНрдпрд╛ рд╕реАрдХреНрд╡рд▓ рдЬреИрд╕реЗ рдЕрдиреНрдп рдУрдЖрд░рдПрдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдЖрдЬрд╝рдорд╛рдПрдВ рдФрд░ рдЕрдкрдиреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВред рдореИрдВ рдХрд┐рд╕реА рднреА рдпреЛрдЧрджрд╛рди рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛!