Gdzie należy umieścić metodę w Railsach, która będzie używana przez wszystkie moje modele?Szyny, gdzie umieścić metodę do zastosowania we wszystkich modelach
Odpowiedz
Będziesz chciał przeprowadzić badania na konwencji Railsowej zwanej "obawami". Oto podsumowanie: Utwórz podkatalog o nazwie obawy w katalogu aplikacji. Utwórz moduł w aplikacji/sprawach i dołącz moduł do wszystkich modeli. Dodaj ścieżkę do aplikacji/zagadnień do swojej ścieżki config.autoload_path w config/application.rb.
Zanim to zrobisz, jestem ciekawa, jaka metoda musiałaby być zawarta we WSZYSTKICH modelach? Ile modeli mówimy i jaki problem próbujesz rozwiązać?
Jest to dane dla zdalnego serwera, a mianowicie serwera socket.io. Używam socket.io do aktualizacji w czasie rzeczywistym i muszę wysłać te aktualizacje z wielu modeli. – JRPete
Nie sądzę, aby niepokój był właściwy. –
Uzgodnione, Aroop. Myślę, że rozwiązanie musi być na wyższym poziomie. Nie jestem jednak wystarczająco zaznajomiony z socket.io. –
Istnieje wiele sposobów, w którym można zrobić osiągnięcia tego
- Używaj OOP i utworzyć klasę i SUB dla ActiveRecord :: Base w projekcie i używać tej klasy jako rodzic dla wszystkich modeli
- Monkey ścieżka ActiveRecord :: Base
- Utwórz moduł i to, że we wszystkich swoich modelach
Możesz napisać do wielokrotnego wykorzystania metody w module i obejmują w niezbędnych modeli.
utworzyć plik w lib/reusable.rb
module Reusable
def reusable_method_1
puts "reusable"
end
def reusable_method_2
puts "reusable"
end
end
Powiedzmy, jeśli chcesz korzystać z tego w modelu użytkownika
class User < ActiveRecord::Base
include Reusable
end
A także upewnić się, że autoload_path włączona w katalogu lib/application.rb
# Custom directories with classes and modules you want to be autoloadable.
config.autoload_paths += %W(#{config.root}/lib)
Widziałem wiele odpowiedzi na to pytanie i żadne z nich nie wspomniało o włączeniu lib w ścieżkach autoload_. +1 za to! rozwiązał mój problem –
Aktywne rozszerzenia rekordów podczas uruchamiania serwera
# 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
- 1. Szyny - gdzie umieścić pliki danych?
- 2. Gdzie umieścić wspólny kod znaleziony w wielu modelach?
- 3. Szyny Zmienna we wszystkich działaniach kontrolera
- 4. Powielone sprawdzanie poprawności we wszystkich obiektach i modelach formularzy
- 5. Gdzie umieścić próbę złapać
- 6. Szyny 3. Jak wykonać akcję zapisu we wszystkich rekordach?
- 7. Python: Czytanie wszystkich plików we wszystkich katalogach
- 8. Gdzie powinienem umieścić publiczną metodę statyczną void main (String [] args)?
- 9. grep we wszystkich katalogach
- 10. Gdzie należy umieścić pustą klasę podstawową?
- 11. Gdzie umieścić skrypty PowerShell?
- 12. gdzie umieścić ActiveModel :: Validator?
- 13. Gdzie umieścić plik właściwości?
- 14. MVVM gdzie umieścić warstwę dostępu do danych?
- 15. Metody wielokrotnego użycia w wielu modelach szyn
- 16. AdMob we wszystkich moich kontrolerach widoku?
- 17. Znajdź typy we wszystkich złożeniach
- 18. toLocaleString() nie jest obsługiwany we wszystkich przeglądarkach?
- 19. Szyny: jak zastąpić: zniszczyć metodę?
- 20. NetBeans i stop/break we wszystkich wyjątkach?
- 21. Mysql - znajdź tabelę we wszystkich bazach danych
- 22. CakePHP - gdzie umieścić logikę usługi
- 23. Gdzie mogę umieścić moje drwiny?
- 24. WPF MahApps.Metro - Gdzie umieścić ResourceDictionaries?
- 25. Pryzmat WPF - gdzie umieścić zasoby?
- 26. gdzie umieścić DTD wewnątrz paczki
- 27. Gdzie umieścić test jednostkowy projektu
- 28. Odświeżanie danych we wszystkich instancjach Azure
- 29. ServiceStack, gdzie umieścić logikę biznesową?
- 30. Ciągłe, zapętlone, przewijane treści we wszystkich kierunkach
Duplikat? http://stackoverflow.com/questions/2328984/rails-extending-activerecordbase –