Нистратов Артём
anistratov@go-promo.ru
Routes
resources :snippetsrake routesresource :snippetroot to: 'snippets#index'namespace :my do
resources :snippets do
put :publish, on: :member
end
endnamespace :my do
resources :snippets do
member do
put :publish
end
end
endnamespace :my do
resources :snippets
endresources :usersresources :users do
resources :snippets
end resources :snippets,
only: [:index, :show]
endget 'about', to: 'home#about'get 'about' => 'home#about'post 'feedback/:category', to: 'feedbacks#add'post 'feedback(/:category)' => 'feedbacks#add'match 'preview' => 'snippets#show'match 'preview' => 'snippets#show',
via: [:get, :post]match 'preview' => 'snippets#show',
via: [:get, :post],
as: :snippet_previewControllers
class SnippetsController < ApplicationController
endapp/controllers/snippets_controller.rbclass SnippetsController < ApplicationController
def index
@snippets = Snippet.order(:created_at).last(10)
end
endgem 'will_paginate'class Snippet < ActiveRecord::Base
enum visibility: [ :_public, :_private ]
...
endrails g migration add_visibility_to_snippet visibility:integer scope :with_public_access, -> {
where visibility: visibilities[:_public]
}
...
end scope :for_main, -> { with_public_access.order :created_at }
...
endControllers
app/controllers/snippets_controller.rbclass SnippetsController < ApplicationController
def index
@snippets = Snippet.order(:created_at).last(10)
end
endclass SnippetsController < ApplicationController
def index
@snippets = Snippet.for_main.page params[:page]
end
end def publish
Snippet.find(params[:id])._public!
end
end4.0
3.2
class SnippetsController < ::SnippetsController
before_action :find_user
...
endclass SnippetsController < ::SnippetsController
before_action :find_user
...
private
def find_user
@user = User.find params[:user_id] if params.key? :user_id
end
endclass SnippetsController < ::SnippetsController
before_action :find_user
...
private
def find_user
@user = User.find params[:user_id] if params.key? :user_id
end
def snippets
if @user.nil?
Snippet
else
@user.snippets
end
end
endclass SnippetsController < ApplicationController
before_action :find_user
def index
@snippets = snippets.for_main.page params[:page]
end
def publish
snippets.find(params[:id])._public!
end
private
def find_user
@user = User.find params[:user_id] if params.key? :user_id
end
def snippets
if @user.nil?
Snippet
else
@user.snippets
end
end
endapp/controllers/my/snippets_controller.rbmodule My
class SnippetsController < ::SnippetsController
private def find_user
@user = ... # current user
end
end
endmodule My
class SnippetsController < ::SnippetsController
def create
@user.snippets.create snippet_params
end
private def find_user
@user = ... # current user
end
end
endclass SnippetsController
...
private
def snippet_params
end
...
endclass SnippetsController
...
private
def snippet_params
params.require(:snippet)
end
...
endclass SnippetsController
...
private
def snippet_params
params.require(:snippet).permit(
:title, :content, :visibility, :lang_ids
)
end
...
enddef new
@snippet = Snippet.new
end
def create
@snippet = @user.snippets.create snippet_params
end
def edit
@snippet = @user.snippets.find params[:id]
end
def update
@snippet = @user.snippets.find(params[:id])
.update snippet_params
end
def destroy
@user.snippets.destroy params[:id]
end<action>.<format>.<template>
def show
...
enddef show
render 'template_name'
enddef show
render template: 'template_name'
enddef show
render action: 'action'
enddef show
redirect_to :root
enddef show
redirect_to user_snippet_path(
@snippet.user, @snippet
)
enddef show
respond_to do |format|
format.html { render :snippet }
format.json { render json: @snippet }
format.xml { render xml: @snippet }
end
enddef show
if request.user_agent =~ /iPad/
request.variant = :ipad
end
respond_to do |format|
format.html do |variant|
variant.phone
variant.ipad { render layout: :ipad }
variant.none
end
format.json { render json: @snippet }
end
enddef show
if request.user_agent =~ /iPad/
request.variant = :ipad
end
respond_to do |format|
format.html do |variant|
variant.phone # => show.html+phone.erb
variant.ipad { render layout: :ipad }
variant.none
end
format.json { render json: @snippet }
end
enddef show
if request.user_agent =~ /iPad/
request.variant = :ipad
end
respond_to do |format|
format.html do |variant|
variant.phone # => show.html+phone.erb
variant.any(:ipad, :tablet) do
render layout: :tablet
end
variant.none
end
format.json { render json: @snippet }
end
endsession[:coupon_code]session[:coupon_code] = SecureRandom.hexsession[:coupon_code] = nilcookies[:color] = '#fff'
cookies.delete :colorflash[:notice] = 'Success!'