Używam Ruby on Rails 3 i chciałbym przenieść niestandardowy i współdzielony kod do modułu.
- Jakiej składni powinienem użyć do napisania kodu modułu?
- W którym folderze mojej aplikacji mam umieścić plik modułu?
- Jak mam dołączyć ten moduł do jednej lub więcej klas kontrolerów?
- Jakie inne czynności muszę wykonać, aby użyć modułu niestandardowego w dowolnym miejscu w mojej aplikacji?
- Jak mogę wywołać metody w module z mojej aplikacji?
Z góry dziękuję.
ruby-on-rails-3
module
user502052
źródło
źródło
Odpowiedzi:
Aby 1. Utworzyć / otworzyć moduł, mówiąc po prostu:
module MyModule def first_module_method end end
Do 2.
lib
folderu. Jeśli chcesz uporządkować swoje moduły wlib
folderze, możesz je same umieścić w modułach. Na przykład, jeśli chcesz mieć podfolder,super_modules
Twoje moduły będą zdefiniowane w następujący sposób:module SuperModules module MyModule def first_module_method end end end
Do 3./5. Włączając moduł do klasy, możesz po prostu wywołać metody modułów tak, jakby były zdefiniowane w klasie:
class MyClass include MyModule def some_method first_module_method #calls module method end end
Do 4. Najpierw upewnij się, że Twój moduł jest naprawdę potrzebny w każdej klasie Twojej aplikacji. Jeśli nie jest, sensowne jest umieszczanie go tylko tam, gdzie jest to potrzebne, aby nie nadużywać klas, które i tak go nie potrzebują. Jeśli naprawdę chcesz, aby moduł był wszędzie, spójrz na hierarchię klas swoich klas w aplikacji. Czy chcesz mieć moduł we wszystkich modelach? Możesz otworzyć ActiveRecord :: Base i dodać tam swój moduł.
źródło
lib
folderze, ważna uwaga jest umożliwienie Rails3 odkomentować linięconfig\application.rb
dlaconfig.autoload_paths
- odczytać np stackoverflow.com/questions/1073076/rails-lib-modules-and ... Uwaga należy również uważać, aby użyć nazwy pliku dla swojego modułu, która pasuje do samej nazwy modułu. Więc jeśli zapiszesz to wlib/test/my_module.rb
, musiszinclude Test::MyModule
- aby uzyskać więcej informacji, zobacz stackoverflow.com/questions/4073856/rails-3-autoloadapp/models
jeśli kod wymaga dostępu do innych modeli. Jeśli Twój kod jest naprawdę „biblioteką” i może istnieć samodzielnie, ja zasugeruj sprzedanie klejnotu. Przykłady można znaleźć na github.com/shageman/the_next_big_thingA> 1. Możesz użyć tej samej składni, co w przypadku każdej innej klasy ruby. Na przykład definiuję moduł VehicleClassifer, który będzie używał metody classify_vehicle do klasyfikowania pojazdu na podstawie liczby kół, które otrzyma jako dane wejściowe.
module VehicleClassifer def classify_vehicle(number_of_wheels) VehicleType.where("number_of_wheels = ?", number_of_wheels) end end
A> 2. Moduły są zwykle przechowywane w folderze / lib.
pytania 3,4,5 mają mniej więcej taką samą odpowiedź. możesz użyć
class SomeController < ApplicationController include VehicleClassfier def index classify_vehicle(4) end end
w klasie, w której używasz modułu, będziesz mieć dostęp do wszystkich metod modułu.
Ponadto, jeśli potrzebujesz użyć modułu w swojej aplikacji, możesz dołączyć go do kontrolera aplikacji.
źródło
ApplicationHelper
?