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

рдореЙрдбрд▓ рдХрд╛ рдЖрдзрд╛рд░ рдЖрдЗрдЯрдо рддрд╛рд▓рд┐рдХрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рд░рдВрдЧреЛрдВ, рдкреНрд░рдХрд╛рд░реЛрдВ, рднрдВрдбрд╛рд░реЛрдВ рдФрд░ рдПрдХрд▓ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рдПрдХрд▓ рд▓рд┐рдВрдХ рд╣реИрдВред рдмрджрд▓реЗ рдореЗрдВ, рдЕрдВрддрд┐рдо рджреЛ рдкрддреЗ рдкреЙрд▓реАрдореЙрд░реНрдлрд┐рдХ рд▓рд┐рдВрдХ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реИрдВред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рд╕рдорд╛рдзрд╛рди рдЗрд╕ рдкреНрд░рдХреГрддрд┐ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЕрдиреБрд░реЛрдз рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
ActiveRecord::Base.connection.execute('SELECT items.*, colors.name as color, types.name as type, stores.name as store_name ... FROM items LEFT JOIN colors ON items.color_id = colors.id LEFT JOIN types ON items.type_id = types.id LEFT JOIN stores ON items.store_id = stores.id ...
рдЬрд╡рд╛рдм рдореЗрдВ, рд╣рдореЗрдВ рд╣реИрд╢ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдорд┐рд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рдирд╛рдо рдпрд╛ рдЙрдкрдирд╛рдо рд╣реЛрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдиреБрдХрд╕рд╛рди рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореВрд▓реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХреЛрдИ рд╕рд╛рдорд╛рдиреНрдп рдЦреЛрдЬ рдирд╣реАрдВ рд╣реИред рджреВрд╕рд░реЗ, рдпрджрд┐ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдкреЗрдЬрд┐рдиреЗрд╢рди рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ ActiveRecord, will_paginate, kaminari, meta_search рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд░реЗрд▓ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рд╣рдорд╛рд░реА рдмрдбрд╝реА рдХреНрд╡реЗрд░реА ActiveRecord рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред
Sql View рдХреЛ рдпрд╛рдж рдХрд░реЗрдВ
рдЗрд╕рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдпрджрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрд╕рдХреНрдпреВрдПрд▓ рдореЗрдВ рдЕрднреНрдпрд╛рд╡реЗрджрди рдХреЗ рд╕рд╛рдеред рджреГрд╢реНрдп (рджреЗрдЦреЗрдВ) - рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛ рдЙрд╕ рд╕рдордп рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд╡реЗрд░реА рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ рдЬреЛ рдЙрд╕ рд╕рдордп рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрдм рджреГрд╢реНрдп рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдПрдХ рдЖрднрд╛рд╕реА рдкрдврд╝рдиреЗ рдХреА рдореЗрдЬ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдЧрд▓рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ mysql рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдкреНрд░рд╕реНрддреБрддрд┐
рдпрд╣рд╛рдВ рд╡рд░реНрдгрд┐рдд
рд╣реИ ред рд╣рдорд╛рд░реЗ рд▓рд┐рдП, рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдПрдХреНрдЯрд┐рд╡рд░рдХреЙрд░реНрдб рдЗрд╕реЗ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЧрд┐рдирддрд╛ рд╣реИ рдФрд░ рдЕрдкрдиреА рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдмрдирд╛рдПрдВ:
rails g migration AddProducts
рд╣рдо рдЗрд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦреЗрдВрдЧреЗ:
def up execute ' CREATE VIEW products AS SELECT i.id AS id, i.name AS name, i.weight AS weight, i.size AS size, c.name as color, t.name as type, s.name AS store_name, sa.street AS store_street, sa.city AS store_city, sa.country AS store_country, sa.phone AS store_phone, m.name AS manufacture_name, ma.street AS manufacture_street, ma.city AS manufacture_city, ma.country AS manufacture_country, ma.phone AS manufacture_phone FROM items AS i LEFT JOIN colors AS c ON i.color_id = c.id LEFT JOIN types AS t ON i.type_id = t.id LEFT JOIN stores AS s ON i.store_id = s.id LEFT JOIN addresses AS sa ON s.id = sa.addressat_id AND sa.addressat_type = "Store" LEFT JOIN manufactures AS m ON i.manufacture_id = m.id LEFT JOIN addresses AS ma ON m.id = ma.addressat_id AND ma.addressat_type = "Manufacture" ' end def down execute 'DROP VIEW products ' end
рд╣рдо рдЙрддреНрдкрд╛рдж рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВ:
class Products < ActiveRecord::Base
рдЕрдм рд╣рдо рдЕрдкрдиреЗ рдЬрдЯрд┐рд▓ рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ, рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдФрд░ рдкреГрд╖реНрдард╛рдВрдХрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХреНрдЯрд┐рд╡рд░рдХреЙрд░реНрдб, рдЕрд░рд┐рд▓ рдФрд░ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдкреВрд░реА рд╢рдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
blue_guitars_in_kiev = Product.where(:color => 'Blue', :type => 'Guitar', :store_city => 'Kiev') blue_guitars_in_kiev.each do |product| puts product.store_name end
рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рд╣реА рд▓реЗрдирджреЗрди рдореЗрдВ, рд░реВрдмреА рдХреЛрдб рдХреЛ рдХрдо рд╕реЗ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдПрдХрдорд╛рддреНрд░ рдирдХрд╛рд░рд╛рддреНрдордХ рдирд╛рдо рдмрджрд▓рдиреЗ рдпрд╛ рдХрд┐рд╕реА рд╕реНрддрдВрдн рдХреЛ рд╣рдЯрд╛рдиреЗ рдкрд░ рдЗрд╕ рдЖрднрд╛рд╕реА рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╡рд╣ рд╕рдм рд╣реИред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореЗрд░реА рдкреЛрд╕реНрдЯ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдереА, рд╕рднреА рдмреЗрд╣рддрд░реАрдиред