resources :projects do member do get :create_act get :create_article_waybill get :print_packing_slips get :print_distributions end collection do get :print_packing_slips get :print_distributions end end resources :buildings do [:act, :waybill].each do |item| post :"create_#{item}" delete :"remove_#{item}" end end
resources :projects do scope module: :projects do resource :finish # GET /projects/1/finish/new # POST /projects/1/finish end end
class Web::Projects::FinishesController < Web::Projects::ApplicationController before_action :check_availability def new end def create end private def check_availability redirect_to resource_project unless resource_project.can_finish? end end
class Web::ApplicationController < ApplicationController self.responder = WebResponder # ActionController::Responder respond_to :html end class Web::UsersController < Web::ApplicationController def update @user = User.find params[:id] @user.update user_params respond_with @user end end
Rails.application.routes.draw do scope module: :web do resources :tasks do scope module: :tasks do resources :comments end end end namespace :api do namespace :v1, defaults: { format: :json } do resources :some_resources end end end class Web::ApplicationController < ApplicationController include UserAuthentication # web include Breadcrumbs # , api? self.responder = WebResponder respond_to :html # html add_breadcrumb {{ url: root_path }} # rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized private def user_not_authorized flash[:alert] = "You are not authorized to perform this action." redirect_to(request.referrer || root_path) end end # , task class Web::Tasks::ApplicationController < Web::ApplicationController # view helper_method :resource_task add_breadcrumb {{ url: tasks_path }} add_breadcrumb {{ title: resource_task, url: task_path(resource_task) }} private # def resource_task @resource_task ||= Task.find params[:task_id] end end # class Web::Tasks::CommentsController < Web::Tasks::ApplicationController add_breadcrumb def new @comment = resource_task.comments.build authorize @comment add_breadcrumb end def create @comment = resource_task.comments.build authorize @comment add_breadcrumb attrs = comment_params.merge(user: current_user) @comment.update attrs CommentNotificationService.on_create(@comment) respond_with @comment, location: resource_task end end
class Web::ApplicationController < ApplicationController include Breadcrumbs # , # , # {{}} , add_breadcrumb {{ url: root_path }} end class Web::TasksController < Web::ApplicationController # add_breadcrumb {{ url: tasks_path }} def show @task = Task.find params[:id] # add_breadcrumb model: @task respond_with @task end end class Web::Tasks::ApplicationController < Web::ApplicationController # add_breadcrumb {{ url: tasks_path }} add_breadcrumb {{ title: resource_task, url: task_path(resource_task) }} def resource_task; end # end class Web::Tasks::CommentsController < Web::Tasks::ApplicationController # .. url, add_breadcrumb def new @comment = resource_task.comments.build authorize @comment add_breadcrumb # " " end end # ru.yml ru: breadcrumbs: defaults: show: "%{model}" new: edit: ": %{model}" web: application: scope: tasks: scope: application: scope: comments: scope:
# app/helpers/application_helper.rb # , def render_breadcrumbs return if breadcrumbs.blank? || breadcrumbs.one? items = breadcrumbs.map do |breadcrumb| title, url = breadcrumb.values_at :title, :url item_class = [] item_class << :active if breadcrumb == breadcrumbs.last content_tag :li, class: item_class do if url link_to title, url else title end end end content_tag :ul, class: :breadcrumb do items.join.html_safe end end # app/controllers/concerns/breadcrumbs.rb module Breadcrumbs extend ActiveSupport::Concern included do helper_method :breadcrumbs end class_methods do def add_breadcrumb(&block) controller_class = self before_action do options = block ? instance_exec(&block) : {} title = options.fetch(:title) { controller_class.breadcrumbs_i18n_title :scope, options } breadcrumbs << { title: title, url: options[:url] } end end def breadcrumbs_i18n_scope [:breadcrumbs] | name.underscore.gsub('_controller', '').split('/') end def breadcrumbs_i18n_title(key, locals = {}) default_key = "breadcrumbs.defaults.#{key}" if I18n.exists? default_key default = I18n.t default_key end I18n.t key, locals.merge(scope: breadcrumbs_i18n_scope, default: default) end end def breadcrumbs @_breadcrumbs ||= [] end # def add_breadcrumb(locals = {}) key = case action_name when 'update' then 'edit' when 'create' then 'new' else action_name end title = self.class.breadcrumbs_i18n_title key, locals breadcrumbs << { title: title } end end
Source: https://habr.com/ru/post/267233/
All Articles