Tutto dipende dalle vostre esigenze. Fornirò qui 2 esempi. Entrambi sono solo librerie personalizzate, situate nella directory lib
.
Primo esempio - "trattamento stringa personalizzata"
# lib/filters.rb
module Filters
# Converts value to canonical view
def self.phone(value)
# remove all non-digits
clean_value = value.gsub(/\D/, '')
country_codes = configus.phone.country_codes
area_code = configus.phone.defaults.area_code
case clean_value.length
when 7
"#{area_code}#{clean_value}"
when 11
# remove country code only if phone starts with the allowed country code
if country_codes.include?(clean_value[0].to_i)
clean_value[1..-1]
else
clean_value
end
else clean_value
end
end
# usage
# app/api/phones_controller.rb
class Api::PhonesController < Api::ApplicationController
def exists
if params[:q]
clean_value = Filters.phone(params[:q])
...
end
end
end
Secondo esempio - aiuto per i messaggi istantanei
# lib/flash_helper.rb
module FlashHelper
def flash_translate(key, options = {})
scope = [:flash, :controllers]
scope += params[:controller].split('/')
scope << params[:action]
t(key, {:scope => scope}.merge(options))
end
end
# app/application_controller.rb
class ApplicationController < ActionController::Base
include FlashHelper
end
# usage
# app/your_controller.rb
class YourController < ApplicationController
def create
@object = Object.new(params[:object])
if @object.save
flash[:success] = flash_translate(:success)
...
end
end
end
Nota: Non dimenticare di aggiungere lib
dir ai percorsi autoload . In config/application.rb
aggiungere/modificare questa riga config.autoload_paths += %W(#{config.root}/lib)
. Quindi per me la risposta è la directory lib
.
Il problema è che se ci sono molti metodi di supporto, 'ApplicationController' può diventare poco maneggevole.Preferisco suddividere i metodi in file helper per categoria e includendo i file in 'ApplicationController', come suggerito nella risposta di Semyon Perepelitsa. –