рдпрд╣рд╛рдБ рдореИрдВ рд╡рд░реНрдгрди рдХрд░реВрдБрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдореИрдВрдиреЗ рдирдП рдкрдиреНрдиреЛрдВ рдХреЗ рд╕рд╛рде рдкреГрд╖реНрдареЛрдВ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдпрд╛ред
рдпрд╣ рдкреЛрд╕реНрдЯ рд░реВрдмреА рдСрди рд░реЗрд▓реНрд╕ рдореЗрдВ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИред
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рд░реВрдмреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдЕрдкрдиреА рд░реВрдмреА рд╣реИ, рдЗрд╕рдореЗрдВ url рд╕рдВрд░рдЪрдирд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ: / рд▓реЛрдХреЗрд▓ / рд╕рдореВрд╣ / рдЙрддреНрдкрд╛рдж
рдЙрджрд╛рд╣рд░рдг: / ru / рдмрд╛рд░-рдХреЛрдб-рд╕реНрдХреИрдирд░ / datalogic-magelan-1100i
рд╕рдореВрд╣ рдФрд░
рдЙрддреНрдкрд╛рдж рдкрд░реНрдорд▓рд┐рдВрдХ рд╣реИ - рд╡рд╣ рд░реЗрдЦрд╛ рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдбреАрдмреА рдореЗрдВ рдЖрдИрдбреА рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдЦреЛрдЬ рдХреА рдЬрд╛рддреА рд╣реИред
рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╕рд╛рдЗрдЯ рдкрд░ рд╕рд╛рдордЧреНрд░реА рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрднреА-рдХрднреА рдкрд░реНрдорд▓рд┐рдВрдХ рддреНрд░реБрдЯрд┐ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ: / ru / bar-code-scanners / datalogic-magelan-1100i
рдЧрд▓рддреА рдпрд╣ рд╣реИ рдХрд┐ рдореИрдЧреЗрд▓рди рджреЛ ll - mage
ll a рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдЙрддреНрдкрд╛рдж рдХреЛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдкрд╣рд▓реЗ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдкреЗрдЬ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЦреЛрдЬ рдЗрдВрдЬрди рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрд╛рд░реНрдп рдкрд░реНрдорд▓рд┐рдВрдХ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдФрд░ рдПрдХ рдирдП URL рдкрд░ рдкрддрд╛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реИред
рдмреЗрд╢рдХ, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдирдЧрдиреЗрдХреНрд╕ рдпрд╛ рдЕрдкрд╛рдЪреЗ рд╕реНрддрд░ рдкрд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдорддреМрд░ рдкрд░ рдХреЗрд╡рд▓ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХреЛрдВ рдХреЗ рдкрд╛рд╕ рд╡реЗрдм рд╕рд░реНрд╡рд░ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрддреА рд╣реИ рдФрд░ рдкреНрд▓рд╕ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд╛ рд╕рдВрдкрд╛рджрди рднреА рдХрдИ рд▓реЛрдХреЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдп рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕ рд╡реНрдпрд╡рд╕рд╛рдп рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЗрд╕рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рдкреЙрд▓реАрдореЙрд░реНрдлрд┐рдХ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдореЙрдбрд▓ рдмрдирд╛рдпрд╛, рдЕрд░реНрдерд╛рдд рдпрд╣ рдЙрддреНрдкрд╛рдж рдФрд░ рд╕рдореВрд╣ рджреЛрдиреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓
20131113223332_create_redirections.rbclass CreateRedirections < ActiveRecord::Migration def change create_table :redirections do |t| t.references :redirectable, polymorphic: true t.string :permalink t.timestamps end end end
рдФрд░ рдпрд╣рд╛рдБ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдореЙрдбрд▓ рд╣реА рд╣реИ:
class Redirection < ActiveRecord::Base attr_accessible :permalink belongs_to :redirectable, polymorphic: true def self.product(permalink) redirection = Redirection.where(permalink: permalink, redirectable_type: "Product").first redirection.redirectable if not redirection.nil? end def self.group(permalink) redirection = Redirection.where(permalink: permalink, redirectable_type: "Group").first redirection.redirectable if not redirection.nil? end end
рдЕрдм рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбрд▓ рдХреЛ рдЯреНрд╡рд┐рд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЧреНрд░реБрдк рдФрд░ рдкреНрд░реЛрдбрдХреНрдЯ рдПрдбреНрд░реЗрд╕рд┐рдВрдЧ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рд░реАрдбрд╛рдпрд░реЗрдХреНрд╢рди рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝реЗрдВред
has_many :redirections, as: :redirectable, :dependent=>:destroy
рдЕрдм рдЖрдкрдХреЛ рдкрд░реНрдорд▓рд┐рдВрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рдПрдВред
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╕рднреА рдореЙрдбрд▓ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдкрд░реНрдорд▓рд┐рдВрдХ рд╣реИ, рд╡реЗ рдореЗрд░реЗ AbstractContent рдордзреНрдпрд╡рд░реНрддреА рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП DRY рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдП рдмрд┐рдирд╛ рдХреЗрд╡рд▓ рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдХрд┐рдВрдЧ рдХреЛрдб рдЬреЛрдбрд╝рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдФрд░ рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореБрдЭреЗ рд░реЗрд▓ рд╕реЗ рдкреНрдпрд╛рд░ рд╣реИ - рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЯреНрд░реИрдХрд┐рдВрдЧ рдкреНрд░рд╛рдердорд┐рдХ рд╣реЛ рдЧрдИред рд░реЗрд▓ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ _changed рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдореЙрдбрд▓ рдФрд░ рдЗрд╕рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреА рд╣реИ? рдФрд░ _рд╡рд╕ред
рдЖрдкрдХреЛ рдмрд╕ рдЗрддрдирд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХреЙрд▓рдмреИрдХ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЬреЛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░реЗрдЧрд╛ рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рдПрдВ
class AbstractContent < ActiveRecord::Base self.abstract_class = true after_save :check_permalink_changes def check_permalink_changes if self.permalink_changed? if self.permalink_was self.redirections.create!(permalink: self.permalink_was) end end end end
рдпрд╣ рдХреЗрд╡рд▓ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдЕрдЧреНрд░реЗрд╖рдг рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ
class GroupsController < ApplicationController def show @group = Group.find_by_permalink(params[:id]) if @group.nil? @group = Redirection.group(params[:id]) || not_found redirect_to group_path(@group), status: 301 end end end
рдФрд░ рд╕реНрдерд┐рддрд┐ 301 рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛ - рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЧрдпрд╛ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, 302 рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджреВрд╕рд░реЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдХреЛрдб рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреЗрдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдорд╛рди рд╣реИред
рдореИрдВ рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдореЗрдВ, find_by_permalink рдХреЛ рдХреИрд╢ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреЛрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЦреЛрдЬ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП find_in_cache рдХреЛ рдпрд╣рд╛рдВ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддреНрд░реБрдЯрд┐ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП 404 рдиреЗ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрдиреЗ рд╡рд╛рд▓реЗ ApplicationController рдХреЗ рд▓рд┐рдП рдПрдХ not_found рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реАред
def not_found raise ActionController::RoutingError.new('Not Found') end
рд╡реИрд╕реЗ, рдпрджрд┐ рдЖрдк production.log рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдлрд╡рд╛рд╣ рдХрд░рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ / рд╕рдореВрд╣ / рдЙрддреНрдкрд╛рдж рд╕рдВрд░рдЪрдирд╛ рдХреЗ URL рдЕрдиреБрд░реЛрдзреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИред рдлрд┐рд░ рд╕рднреА not_found рдХреЙрд▓ рдХреА рд▓реЙрдЧрд┐рдВрдЧ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рдкреБрдирд╢реНрдЪ рдЦреИрд░, рдЖрдк рдЕрднреА рднреА рд╕рднреА рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдФрд░ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП RedirectionsController рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред