
рдирдорд╕реНрдХрд╛рд░ рджреЛрд╕реНрддреЛрдВред рдпрд╣ рдХреЛрдИ рд░рд╣рд╕реНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЬрдЯрд┐рд▓ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛, рд╕рдХреНрд░рд┐рдп рд░рд┐рдХреЙрд░реНрдб рд╕рд╣рд╛рдпрдХ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдмреЛрдЭ рдмрди рдЬрд╛рддрд╛ рд╣реИред рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдореВрд▓ рддрд░реАрдХреЗ рд╕реЗ (рд╢реБрджреНрдз SQL рдореЗрдВ) PostgreSQL рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рдЬрдЯрд┐рд▓ рдХреНрд╡реЗрд░реА рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЪрд░ рдореМрдЬреВрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рд░реЗрд▓ рдореЗрдВ рдПрдХ рдЕрдкреНрд░рд┐рдп рдЯреНрд░рд┐рдлрд╝рд▓ рд╣реИ, рджреЗрд╢реА рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдирд╛рдорд╛рдВрдХрд┐рдд рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреА рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ :) рд░реЗрд▓ рдПрдкреАрдЖрдИ 5.2 + рд░реВрдмреА 2.6.0 + рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ 11 рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдФрд░ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рддреЛ, рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ред рдореБрдЦреНрдп рд╡рд┐рдзрд┐ рдЬреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ SQL рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рд╡рд╣ рд╣реИ exec_query:
sql = 'SELECT id, name, desc FROM schema.news WHERE id=$1' bindings = [[nil, 100]] new = ActiveRecord::Base.connection.exec_query(sql, 'SQL', bindings).first
рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдмрд╛рдЗрдВрдбрд░реЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕реЗ рдПрдХ рд╕реНрдерд╛рди рдкрд░ рд░рдЦрдХрд░, рдЬрдм рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ 100 рдирдВрдмрд░ рдХреЗ рддрд╣рдд рд╕рдорд╛рдЪрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдирд╛рдо рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЧрд┐рдиреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдФрд░ рдпрд╣ рджреЗрд╢реА рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдкрдврд╝рдиреЗ рдФрд░ рд╕рдорд░реНрдерди рдХреЛ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдХрд░рддрд╛ рд╣реИред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк рдореЙрдбрд▓ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП find_by_sql рдореЗрдердб рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
sql = 'SELECT id, name, desc FROM schema.news WHERE id=:id' new = New.find_by_sql([sql, id: 100]).first
рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдЕрдзрд┐рдХ рд╕реБрдЦрдж рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рд▓реЗрдХрд┐рди рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ рдпрджрд┐ рдЖрдк рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЕрдиреБрд░реЛрдз рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрдЯрд┐рд▓ рд╣реИ, рддреЛ рдЗрд╕реЗ рдореЙрдбрд▓ рдФрд░ рдПрдХреНрдЯрд┐рд╡ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдЧрддрд┐ (рдзреАрд░реЗ-рдзреАрд░реЗ) рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдмрдбрд╝реА рд╣рд╛рдирд┐ рд╣реЛрддреА рд╣реИ (рдпрд╣ рд╕рд░реНрд╡рд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЦрд╛рддреА рд╣реИ)ред рджреЗрд╢реА рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдирд╛рдорд╛рдВрдХрд┐рдд рдмрд╛рдЗрдВрдбрд░реНрд╕ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИрдВ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рд░рд╣рд╕реНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ - рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдЫреЛрдЯрд╛ рдЖрд╡рд░рдг рд▓рд┐рдЦреЗрдВ рдЬреЛ рдирд╛рдорд┐рдд рдмрд╛рдЗрдВрдбрд░реЛрдВ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рд░рд▓рддрд╛ рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдореИрдВрдиреЗ рдХрд┐рдпрд╛ рдерд╛ред
рдореИрдВ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдХрд╛ рдХреЛрдб рд▓рд╛рддрд╛ рд╣реВрдВ:
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдХреЛрдб рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдм рдХреБрдЫ рдШрд░ рдХреЗ рдХреЛрдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд░рд▓ рд╣реИред рдХреНрд╡реЗрд░реА рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рддреА рд╣реИ:
sql = 'SELECT id, name, desc FROM schema.news WHERE id=:id' binding = { id: 100 } new = SqlQuery.execute(sql, binding).first
рдЖрдЙрдЯрдкреБрдЯ рд╣рдореЗрд╢рд╛ рдХреЗрд╡рд▓ рдПрдХ рд╣реИрд╢ рд╣реЛрддрд╛ рд╣реИред рдереЛрдбрд╝рд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдгред рдирд┐рд╖реНрдкрд╛рджрди рд╡рд┐рдзрд┐ рдмрд╛рдЗрдВрдбрд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рдПрдХ рд╣реИрд╢ рд▓реЗрддрд╛ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЕрдиреБрд░реЛрдз рдФрд░ рд╣реИрд╢ рдореЗрдВ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдорд┐рд▓рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдмрд╛рдЗрдВрдб рдХреЗ рд╕рд╛рде рд╣реИрд╢ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрдХреНрд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдиреБрд░реЛрдз рдореЗрдВ рд╕реНрд╡рдпрдВ $ 1, $ 2, рдЖрджрд┐ рдХреЗ рдЧрд┐рдиреЗ рд╣реБрдП рдЪрд░ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЧрд┐рдиреЗ рд╣реБрдП рдорд╛рдиреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ рд╕рд░рдгреА рдХрд╛ рдкрд╣рд▓рд╛ рддрддреНрд╡ $ 1, рджреВрд╕рд░рд╛ $ 2, рдФрд░ рдЗрд╕реА рддрд░рд╣ рд╣реЛрддрд╛ рд╣реИред рдлрд┐рд░ рд╣рдо рдорд╛рдирдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд_рдХреНрд╡реЗрд░реА рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдореИрдкрд░ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╣реИрд╢ рдХреЛ рдкрд╛рддреНрд░реЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдлрд┐рд░ рд╕реЗ рдЙрддреНрддрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдореИрдкрд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╣рдо JSON рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдлрд╝реАрд▓реНрдб рдорд╛рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ JSON рд╣реИ рдФрд░ рдпрд╣ рдорд╛рдиреНрдп рд╣реИ, рддреЛ рдЗрд╕реЗ рдХреБрдВрдЬрд┐рдпреЛрдВ рдФрд░ рдкреНрд░рддреАрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╣реИрд╢ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ, рдпрджрд┐ рдлрд╝реАрд▓реНрдб JSON рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХреЗрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдорд╛рди рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рд╡рд╣ рд╕рдм рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдордЧреНрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рддреЗ рд╣реБрдП рд╕реИрдХрдбрд╝реЛрдВ рдкреНрд░рдХрд╛рд░ рдХреЗ рдордгрд┐ рдбрд╛рд▓рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рдЖрдк рдХрдИ рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрдгрдп рдмрд╣реБрдд рдЬрд▓реНрджреА рд╕реНрд╡рдпрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдиреНрдпреВрдирддрдо рд╕рдордп рдФрд░ рдХреЛрдб рдЦрд░реНрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рджред
рдЧреАрдереВрдм рдХреЗ рд▓рд┐рдВрдХ рдФрд░ рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рд╛рде рдЬрд╡рд╛рд╣рд░рд╛рдд рдХрд╛рдЯ:
github.com/kirill-dan/active_sql_bindingsrubygems.org/gems/active_sql_bindingsрд╕рднреА рдХреЛ рд╢реБрднрдХрд╛рдордирд╛рдПрдВ, рдЬрд▓реНрдж рд╣реА рдорд┐рд▓рддреЗ рд╣реИрдВред
рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдмреНрд▓реЙрдЧ рд╕реЗ рдкреБрдирд░реНрдореБрджреНрд░рдгред
рдпрд╣рд╛рдВ рдореВрд▓