Dove dovrei mettere un metodo in Rails che sarà usato da tutti i miei modelli?Rails dove mettere un metodo da usare in tutti i modelli
risposta
Avrai voglia di fare qualche ricerca su una convenzione di Rails chiamata "Preoccupazioni". Ecco il punto debole: crea una sottodirectory chiamata preoccupazioni nella tua directory app. Crea il tuo modulo in app/preoccupazioni e includi il modulo in tutti i tuoi modelli. Aggiungi il percorso per app/preoccupazioni al tuo config.autoload_path in config/application.rb.
Prima di fare qualsiasi cosa, sono curioso di sapere quale tipo di metodo dovrebbe essere incluso in TUTTI i modelli? Quanti modelli stiamo parlando e quale problema stai cercando di risolvere?
È per i dati su un server remoto, vale a dire un server socket.io. Sto usando socket.io per gli aggiornamenti in tempo reale e ho bisogno di inviare quegli aggiornamenti da più modelli. – JRPete
Non credo che la preoccupazione sia il modo giusto –
Concordato, Aroop. Penso che la soluzione debba essere ad un livello più alto. Non sono abbastanza familiare con socket.io, però. –
Ci sono diversi modi in cui si potrebbe fare raggiungere questo
- Usa OOP e e creare una classe di sub per ActiveRecord :: Base nel progetto e l'uso che classe come un genitore per tutti i vostri modelli
- scimmia percorso ActiveRecord :: Base
- Creare un modulo e comprendono che in tutti i vostri modelli
È possibile scrivere i metodi riutilizzabili in un modulo e includere nei modelli necessari.
creare un file in lib/reusable.rb
module Reusable
def reusable_method_1
puts "reusable"
end
def reusable_method_2
puts "reusable"
end
end
Diciamo che se si desidera utilizzare questo modello di utente
class User < ActiveRecord::Base
include Reusable
end
E anche assicurare che l'autoload_path abilitato per lib/a application.rb
# Custom directories with classes and modules you want to be autoloadable.
config.autoload_paths += %W(#{config.root}/lib)
Ho visto molte risposte a questa domanda e nessuno di loro ha menzionato l'inclusione di lib in autoload_paths. +1 per quello! risolto il mio problema –
Estensioni record attive durante l'avvio del server
# config/initializers/core_extensions.rb
class ActiveRecord::Base
# write ur common base code here
def self.per_page
@@per_page ||= 10
end
def self.pagination(options)
paginate :per_page => options[:per_page] || per_page, :page => options[:page]
end
end
Duplicato? http://stackoverflow.com/questions/2328984/rails-extending-activerecordbase –