рдЖрдЬ рдореИрдВ рд╣рдореЗрд╢рд╛ рд╕реНрдкрд╖реНрдЯ рд░рд┐рдХреЙрд░реНрдб рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдФрд░ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рдЕрдкрдиреЗ рд╕реЗрдЯ рдХреЛ рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдЬреЛ рдХрд┐ рдореБрдЭреЗ рд░реВрдмреА рдХреЛ рд░реЗрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдпрд╛ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рдмреНрд▓реЙрдЧ рдореЗрдВ рдорд┐рд▓рд╛ред
Update_attributes рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╕рддреНрдпрд╛рдкрди рдмрд╛рдпрдкрд╛рд╕рдорд╛рдирдХ update_attributes рд╡рд┐рдзрд┐ рдореЗрдВ рд╕рддреНрдпрд╛рдкрди рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рдиреЗ рдХреА рдХреБрдВрдЬреА рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ save_attributributors рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдмрд╛рдж рдореЗрдВ рд╕рд╣реЗрдЬрдирд╛ рд╣реЛрдЧрд╛
@user = User.find(params[:id]) @user.assign_attributes(:name, "") @user.save(validate: false)
рдмреЗрд╢рдХ - рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рди рд▓реЗрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ рдЕрдХреНрд╕рд░ :)
2 рдЕрд╕рдорд╛рди рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВрдХрднреА-рдХрднреА рд╕рдорд╕реНрдпрд╛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдПрдХ рдирдореВрдиреЗ рдХреЛ 2 рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред рдЗрд╕ рд╕реНрдХреЛрдк рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдРрд╕рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
Article < ActiveRecord::Base scope :unchecked, where(:checked => false)
рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдФрд░ рддрджрдиреБрд╕рд╛рд░ рджреЛрдиреЛрдВ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
Article.unchecked Article.unchecked2(@unchecked_articles)
рд╕рд╛рд╣рд╕рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВрдиреЗ рдкреНрд▓рдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдк рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдиреЗ рдХреБрдЫ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ
Article.all.select(:title).map(&:title)
рдпрд╛ рднреА
Article.all.map(&:title)
рддреЛ - рдкреНрд▓рдХ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ
Article.all.pluck(:title)
рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рддрдХ рдкрд╣реБрдВрдЪрдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдореИрдВ рдореЙрдбрд▓ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдПрдХ рдмрдбрд╝реЗ рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдФрд░ рдореВрд▓ рд╡рд░реНрдЧ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрд░ рдЖрдпрд╛ рдерд╛ред рдХрдХреНрд╖рд╛рдПрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рдереАрдВ:
class Art < ActiveRecord::Base end class Picture < Art end class PlainPicture < Picture end
PlainPicture рд╕реЗ Art рдореЗрдВ рдЖрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
@plain_pictures = PlainPicture.all @plain_pictures.map { |i| if i.class < Art then i.becomes(Art) else i end }.each do |pp|
first_or_create рдФрд░ first_or_initializeрдПрдХ рдФрд░ рдмрдврд╝рд┐рдпрд╛ рддрд░реАрдХрд╛ рд╣реИ рдкрд╣рд▓реЗ_рд░_рдХреНрд░реАрдЯред рдпрд╣ рдирд╛рдо рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╡рд╣ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
Art.where(name: "Black square").first_or_create
рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдмреНрд▓реЙрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рдореЗрдВ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
Art.where(name: "Black square").first_or_create do |art| art.author = "Malevich" end
рдФрд░ рдЕрдЧрд░ рдЖрдк рд╕рд╣реЗрдЬрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рддреЛ рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП first_or_initialize рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
@art = Art.where(name: "Black square").first_or_initialize
scoped рдФрд░ рдХреЛрдИ рдирд╣реАрдВ
2 рдФрд░ рдЕрджреНрднреБрдд рддрд░реАрдХреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ - scoped рдФрд░ рдХреЛрдИ рдирд╣реАрдВред рд╡реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ - рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдКрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЙрдирдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ rails3 рдФрд░ rails4 рдореЗрдВ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрд▓рдЧ рд╣реИред
def filter(filter_name) case filter_name when :all scoped when :published where(:published => true) when :unpublished where(:published => false) else none end end
рдЬрдм рдкреНрд░рдХрд╛рд╢рд┐рдд: рдФрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд: рдЕрдкреНрд░рдХрд╛рд╢рд┐рдд рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреИрд╕реЗ рд╕рдордЭреЗрдВрдЧреЗ, рддреЛ рд╡рд┐рдзрд┐ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдпрд╣рд╛рдВ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИред
Rails3 рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╕реНрдХреЛрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╣рдореЗрдВ рдПрдХ рдЕрдирд╛рдо рдЧреБрдВрдЬрд╛рдЗрд╢ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрдЯрд┐рд▓ рдпреМрдЧрд┐рдХ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ rails4 рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рд╕рдВрджреЗрд╢ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рдзрд┐ рдкрджрд╛рд╡рдирдд рд╣реЛ рдЧрдИ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп Model.all рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╣реИред Rails3 рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, Model.all рд░рд┐рдЯрд░реНрди рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИ ActiveRecord :: Relation, рд▓реЗрдХрд┐рди Arrayред
рдХреЛрдИ рднреА рдирд╣реАрдВ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рдмрд┐рд▓реНрдХреБрд▓ рд╡рд┐рдкрд░реАрдд scoped рдХреЗ рд╕рдорд╛рди рд╣реИ :) рдпрд╣ рд╡рд┐рдзрд┐ рдЦрд╛рд▓реА ActiveRecord :: Relation рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ rails4 рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╢реВрдиреНрдп рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд░реЗрд▓ 3 рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ:
scope :none, where(:id => nil).where("id IS NOT ?", nil)
рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╢реБрд░реБрдЖрддреА рдореЗрдВ)
class ActiveRecord::Base def self.none where(arel_table[:id].eq(nil).and(arel_table[:id].not_eq(nil))) end end
find_eachрдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП find_each рд╡рд┐рдзрд┐ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдмреЗрд╢рдХ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдирдореВрдирд╛ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ
Article.where(published: true).each do |article|
рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдкреВрд░реЗ рдирдореВрдиреЗ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдбреЗрдЯрд╛ рдХреА рдПрдХ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрд╣реБрдд рд▓рд╛рднрд╣реАрди рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдЙрдЪрд┐рдд рд╣реЛрдЧрд╛
Article.where(published: true).find_each do |article|
рдЬреЛ рдЫреЛрдЯреЗ рдирдореВрдиреЛрдВ рдореЗрдВ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рд╕рдордп рдореЗрдВ 1000 рдСрдмреНрдЬреЗрдХреНрдЯ) рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред
to_sql рдФрд░ рд╕рдордЭрд╛рдПрдВрдЖрдкрдХреЗ рдЕрдиреБрд░реЛрдз рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рддрд░реАрдХреЗред
Art.joins(:user).to_sql
рдЖрдкрдХреЛ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреНрд╡реЗрд░реА рд▓реМрдЯрд╛рдПрдЧрд╛ рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдХреНрд╡реЗрд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд░рдЪрдирд╛ рдХрд░реЗрдЧрд╛, рдФрд░
Art.joins(:user).explain
рдЕрдиреБрд░реЛрдз рдкрд░ рддрдХрдиреАрдХреА рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдЦрд╛рдПрдВрдЧреЗ - рд╕рдордп, рдирдореВрдирд╛ рдЖрдХрд╛рд░ рдФрд░ рдЕрдиреНрдп рдбреЗрдЯрд╛ рдХреА рдЕрдиреБрдорд╛рдирд┐рдд рдорд╛рддреНрд░рд╛ред
scopingрдпрд╣ рд╡рд┐рдзрд┐ рдЖрдкрдХреЛ рдЪрдпрди рдХреЗ рднреАрддрд░ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
Article.where(published: true).scoping do Article.first end
рдЬреИрд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ
SELECT * FROM articles WHERE published = true LIMIT 1
рдорд░реНрдЬрдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдзрд┐ рдЬреЛ рдЖрдкрдХреЛ рдХрдИ рдирдореВрдиреЛрдВ рдХреЛ рдкрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
class Account < ActiveRecord::Base
рдЖрдкрдХреЛ рдЙрди рд╕рднреА рдЦрд╛рддреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рдирдореЗрдВ рдЕрдкрдард┐рдд рд╕рдВрджреЗрд╢ рд╣реИрдВред