рд░реВрдмреА рдСрди рд░реЗрд▓реНрд╕ рдкрд░ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдлреНрд░реА-рд▓рд╛рдВрд╕ рдмреЛрд░реНрдб

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА RoR рд╕реЗ рдХрдо рд╕реЗ рдХрдо рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ рдФрд░ рдЗрд╕ рдкрд░ рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИред рдпрд╣ рд╕рд╛рдордЧреНрд░реА OpenID рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧреА, рд╕рд╛рде рд╣реА рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рд╣реЛрдЧреА рдЬреЛ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ MongoDB рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИред

рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:


рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрдорд╛рдг


rails new lancemine -O -G -T

-рдПрдВрдбреНрд░реЙрдпрдбрдХрд╛рд░реНрдб (рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдореЛрдВрдЧреЙрдпрдб) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдордирд╛ рдХрд░реЗрдВ
-Git рддреНрдпрд╛рдЧреЗрдВ (рдореИрдВ рдорд░реНрдХреНрдпреВрд░рд┐рдпрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ)
-T рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдЗрдВрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛

рд╣рдо Gemfile рдХреЛ рд╕рд╣реА рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЗрд╕реЗ рдЗрд╕ рд░реВрдк рдореЗрдВ рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
 source 'https://rubygems.org' gem 'rails', '3.2.8' gem 'inherited_resources' gem 'slim-rails' gem 'mongoid' group :assets do gem 'sass-rails', '~> 3.2.3' gem 'coffee-rails', '~> 3.2.1' gem 'therubyrhino', :platforms => :mswin gem 'therubyracer', :platforms => :ruby gem 'execjs' gem 'uglifier', '>= 1.0.3' end gem 'jquery-rails' 


рдпрд╣рд╛рдВ рд╣рдо рдЙрди рд░рддреНрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЬреЗрдПрд╕ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред рдЙрдкрдЪрд╛рд░рд╛рддреНрдордХ рдХреЛ рддреЗрдЬ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреАрдд рдХреЗ рддрд╣рдд рдЗрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдореЛрдЬрд╝рд┐рд▓рд╛ рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

bundle

рд╣рдо MongoDB рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЬрдирд░реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ
рд░реЗрд▓ рдЬреА рдореЛрдВрдЧреЙрдпрдб: рд╡рд┐рдиреНрдпрд╛рд╕

рдЕрд╕реНрдерд┐рд░


рдпрджрд┐ рдЖрдк рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдорд░реНрдХреНрдпреВрд░рд┐рдпрд▓ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ рд╕рдм рдХреБрдЫ рдЧрд┐рдЯ рдХреЗ рд╕рдорд╛рди рд╣реА рдХрд░рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЖрд╕рд╛рди рдФрд░ рдЕрдзрд┐рдХ рддрд╛рд░реНрдХрд┐рдХред

рд╣рдореЗрдВ рдЕрд╕реНрдерд╛рдпреА рдФрд░ рдЕрдХреНрд╕рд░ рдмрджрд▓рддреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рдг рд╕реЗ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реВрдЯ рдореЗрдВ .hgignore рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

 db/schema.rb config/mongoid.yml .bundle tmp Gemfile.lock syntax: glob db/*.sqlite3 log/*.log public/uploads/* public/assets/* *.swp *.orig *~ 


рдлрд┐рд░ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:

 hg init hg ci -Am "Init" 

рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рд╕рднреА рдирдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ
-рдмрддрд╛ рджреЗрдВ рдХрд┐ рдХрдореЗрдВрдЯ рдореЗрдВ рдХрдореЗрдВрдЯ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЙрдбрд▓


рд░реЗрд▓ рдЬреА рдореЙрдбрд▓ рдпреВрдЬрд░ рдУрдкрдирд┐рдб_рд╕рд┐рдЯреА рдУрдкрдирд┐рдб_рдбрд╛рдЯрд╛: рд╣реИрд╢ рд╕реНрдерд┐рддрд┐

рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдРрдк / рдореЙрдбрд▓ / user.rb рдореЙрдбрд▓ рдмрдирд╛рдПрдЧрд╛, рдЗрд╕реЗ рдлреЙрд░реНрдо рдореЗрдВ рд▓рд╛рдПрдЧрд╛:

 class User include Mongoid::Document include Mongoid::Timestamps field :openid_identity, type: String field :openid_data, type: Hash field :status, type: String has_many :projects end 


рдореЛрдВрдЧреЙрдпрдб рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ: рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдПрдЖрд░ рд╕реЗ рд╣рдореЗрдВ рдкрд░рд┐рдЪрд┐рдд рдмрдирд╛рддрд╛ рд╣реИ_рдЯреИрдЯ рдФрд░ рдЕрдкрдбреЗрдЯ_рдЯ

рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ


рд░реЗрд▓ рдЬреА рд╕реНрдХреИрдлреЙрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╢реАрд░реНрд╖рдХ рдмреЙрдбреА рдмрдЬрдЯ рд╕рдордп

рдореЙрдбрд▓ рдореЗрдВ рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝реЗрдВ:
 include Mongoid::Timestamps belongs_to :user 


рдореИрдВрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдореЗрдВ рднреА рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛, рдЙрдиреНрд╣реЗрдВ рднрдВрдбрд╛рд░ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЕрдзрд┐рд╡реЗрд╢рди


рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрдВрдЬреАрдХрд░рдг рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреЗрд╡рд▓ рд▓реЙрдЧрд┐рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ OpenID рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЙрдЧрд┐рди рдХрд░реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ loginza.ru/js/widget.js рдкрд░ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВрдЧреЗред

рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рд╡рд┐рдЪрд╛рд░ / рд▓реЗрдЖрдЙрдЯ / application.html.slim:
 doctype html html head title Lancemine = stylesheet_link_tag "application", :media => "all" = javascript_include_tag "application" script src="http://loginza.ru/js/widget.js" type="text/javascript" 


рдФрд░ рд╡рд┐рдЬреЗрдЯ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
loginza.ru/api/widget?token_url=#{u 'http://localhost:3000/signin'}&providers_set=vkontakte,facebook,livejournal

рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ : 3000 / рд╕рд╛рдЗрдирдЗрди - рдпрд╣ рд╡рд╣ рдкрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд▓реЙрдЧрд┐рди рдХреЗ рдмрд╛рдж рд▓реЙрдЧрд┐рди рдХрд░рдиреЗ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░реЗрдЧрд╛
рдкреНрд░рджрд╛рддрд╛рдУрдВ_рд╕реЗрдЯ - рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдордд рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреАред

рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдХ:
рд░реЗрд▓ рдЬреА рдирд┐рдпрдВрддреНрд░рдХ рд╕рддреНрд░:
 class SessionsController < ApplicationController require 'net/http' require 'json' def create openid_data = params[:token] openid_data = Net::HTTP.get(URI.parse("http://loginza.ru/api/authinfo?token=#{params[:token]}")) openid_data = JSON.parse openid_data user = User.find_or_create_by(openid_identity: openid_data['identity']) if user.status != 'banned' user.openid_data = openid_data user.save session[:user_id] = user.id redirect_to root_url, :notice => "Logged in!" else redirect_to root_url, :notice => "You blocked!" end end def destroy session[:user_id] = nil redirect_to root_url, :notice => "Logged out!" end end 


рдпрд╣рд╛рдВ рд╣рдо рдиреЗрдЯ / http рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЯреЛрдХрди рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рд▓реЙрдЧрд┐рди рдкреЛрд╕реНрдЯ рдиреЗ рд╣рдореЗрдВ / рд╕рд╛рдЗрдирдЗрди рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдерд╛ред TODO: рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ (рд▓реЙрдЧрд┐рди рдПрдХ рддреНрд░реБрдЯрд┐ рд▓реМрдЯрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ)ред

рдлрд┐рд░ рд╕рдВрдмрдВрдзрд┐рдд OpenID рд╡рд╛рд▓рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╣реИ рдпрд╛ рдПрдХ рдирдпрд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдИрдбреА рдХреЛ рд╕рддреНрд░ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред

рдЕрдиреНрдпрдерд╛, рд╕рддреНрд░ рддрдВрддреНрд░ рд░реЗрд▓ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рдорд╛рди рд╣реИред рдореИрдВ рдЖрдкрдХреЛ session_helper.rb рдлрд╝рд╛рдЗрд▓ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдФрд░ application_controller.rb рдореЗрдВ рдЗрд╕рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рдпрдВрддреНрд░рдХ


 class ProjectsController < InheritedResources::Base before_filter :signed_in_user, except: [:show, :index] before_filter :correct_user, only: [:update, :edit, :destroy] def show @project = Project.find params[:id] @author = @project.user.id == current_user.id if signed_in? show! end def create @project = Project.new params[:project] @project.user = current_user create! end def index @projects = Project.order_by(:created_at.desc) end private def correct_user @project = current_user.projects.find(params[:id]) redirect_to root_url if @project.nil? end end 


рдпрд╣ рдХреЛрдб рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рдореИрдВ InheritedResources рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ ред рдпрд╣ рд░рддреНрди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ CRUD рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рддрд╛ рд╣реИред рдмрдирд╛рдПрдБ, рджрд┐рдЦрд╛рдУ! - рдпрд╣ рдЗрд╕ рдордгрд┐ рдХреЗ рд╕рд╣рд╛рдпрдХреЛрдВ рдХрд╛ рдЖрд╣реНрд╡рд╛рди рд╣реИред рдореИрдВ рдЖрдкрдХреЛ рд▓рд┐рдВрдХ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдЗрд╕рдХреЗ рд╡рд┐рд╕реНрддреГрдд рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдареАрдХ рд╣реИ, рдкрд╣рд▓реЗ_рдлрд┐рд▓реНрдЯрд░ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдФрд░ рдЗрд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣реБрдВрдЪ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рд╡рд┐рдЪрд╛рд░реЛрдВ / рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ / show.html.slim рдореЗрдВ рдореИрдВ рд▓реЗрдЦрдХ рдХрд╛ OpenID рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ
 = link_to @project.user.openid_identity, @project.user.openid_identity 
рддрджрдиреБрд╕рд╛рд░, рдпрджрд┐ рдХреЛрдИ рдХрд▓рд╛рдХрд╛рд░ рдХрд┐рд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдлреЗрд╕рдмреБрдХ, рд╡реАрдХреЙрдиреНрдЯреЗрдХреНрдЯ рдпрд╛ рд▓рд╛рдЗрд╡рдЬрд░реНрдирд▓ рдкрд░ рдЕрдкрдиреА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧреНрд░рд╛рд╣рдХ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдиреНрдпреВрдирддрдо рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рд╕рдВрджреЗрд╢ рдмреЛрд░реНрдб рд╣реИред рд╣рдореЗрдВ рдЕрднреА рднреА рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рд╕рдореАрдХреНрд╖рд╛, рдкреНрд░реЛрдлрд╛рдЗрд▓ рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдмрдбрд╝реА рдХрдВрдкрдиреА рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рдЫреЛрдЯрд╛ рдХрджрдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдХреБрдЫ рд╕рдВрдкрд╛рджрди рдЫреЛрдбрд╝ рджрд┐рдП, рдЬреЛ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рдереЗ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ bitbucket.org/nleo/lancemine рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ

RoR рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рдЕрдиреБрд╡рд╛рдж
рд░реВрдмреА рдСрди рд░реЗрд▓реНрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓: рд▓рд░реНрдирд┐рдВрдЧ рд░реЗрд▓реНрд╕ рд╡рд┐рде рдПрдЧреНрдЬрд╝рд╛рдореНрдкрд▓реНрд╕
InheritedResources
Mongoid

Source: https://habr.com/ru/post/In153257/


All Articles