Szukaj…


Kontrolery

Nazwy klas kontrolerów są pluralizowane. Powodem jest to, że kontroler kontroluje wiele instancji obiektu.

Na przykład : OrdersController będzie kontrolerem tabeli orders . Railsy będą wtedy szukać definicji klasy w pliku o nazwie orders_controller.rb w katalogu /app/controllers .

Na przykład : PostsController będzie kontrolerem dla tabeli posts .

Jeśli nazwa klasy kontrolera zawiera wiele słów pisanych wielkimi literami, zakłada się, że nazwa tabeli zawiera podkreślenia między tymi słowami.

Na przykład: jeśli kontroler ma nazwę PendingOrdersController wówczas zakładana nazwa pliku dla tego kontrolera to pending_orders_controller.rb .

Modele

Model jest nazywany przy użyciu konwencji nazewnictwa klas nieprzerwanego MixedCase i jest zawsze liczbą pojedynczą w nazwie tabeli.

Na przykład : jeśli tabela została nazwana orders , skojarzony model miałby nazwę Order

Na przykład : jeśli tabela została nazwana posts , skojarzony model miałby nazwę Post

Railsy będą wtedy szukać definicji klasy w pliku o nazwie order.rb w katalogu /app/models .

Jeśli nazwa klasy modelu zawiera wiele słów pisanych wielkimi literami, zakłada się, że nazwa tabeli zawiera podkreślenia między tymi słowami.

Na przykład: jeśli model nosi nazwę BlogPost wówczas zakładana nazwa tabeli to blog_posts .

Widoki i układy

Kiedy renderowana jest akcja kontrolera, Railsy będą próbowały znaleźć pasujący układ i widok na podstawie nazwy kontrolera.

Widoki i układy są umieszczane w katalogu app/views .

Po otrzymaniu żądania akcji PeopleController#index , Railsy będą szukać:

  • układ o nazwie people w app/views/layouts/ (lub application jeśli nie znaleziono dopasowania)
  • widok o nazwie index.html.erb w app/views/people/ domyślnie
  • jeśli chcesz wyrenderować inny plik o nazwie index_new.html.erb , musisz napisać do niego kod w akcji PeopleController#index np. render 'index_new'
  • możemy ustawić różne layouts dla każdej action , pisząc render 'index_new', layout: 'your_layout_name'

Nazwy plików i automatyczne ładowanie

Pliki Rails - i ogólnie pliki Ruby - powinny być nazywane lower_snake_case plików lower_snake_case . Na przykład

app/controllers/application_controller.rb

to plik zawierający definicję klasy ApplicationController . Zwróć uwagę, że chociaż PascalCase jest używany do nazw klas i modułów, pliki, w których się znajdują, powinny nadal mieć wartość lower_snake_case .

Konsekwentne nazewnictwo jest ważne, ponieważ Railsy używają automatycznie ładujących się plików w razie potrzeby i używają „przegięcia” do transformacji między różnymi stylami nazewnictwa, takimi jak transformacja application_controller do ApplicationController iz powrotem.

Np. Jeśli Railsy BlogPost klasa BlogPost nie istnieje (nie została jeszcze załadowana), poszuka pliku o nazwie blog_post.rb i spróbuje załadować ten plik.

Dlatego ważne jest także nadawanie nazw plikom według ich zawartości, ponieważ autoloader oczekuje, że nazwy plików będą pasować do zawartości. Jeśli na przykład blog_post.rb zawiera klasę o nazwie Post , zobaczysz komunikat LoadError : Expected [some path]/blog_post.rb to define BlogPost .

Jeśli dodasz katalog pod app/something/ (np. / Models / products /), i

  • chcesz nadać modułom i klasom przestrzeni nazw nowy katalog, wtedy nie musisz nic robić i sam się załaduje. Na przykład w app/models/products/ you would need to wrap your class in moduł Produkty.
  • nie chcę nazywać modułów i klas przestrzeni nazw wewnątrz mojego nowego config.autoload_paths += %W( #{config.root}/app/models/products ) wtedy musisz dodać config.autoload_paths += %W( #{config.root}/app/models/products ) do application.rb aby automatycznie załadować.

Jeszcze jedną rzeczą, na którą należy zwrócić uwagę (zwłaszcza jeśli angielski nie jest twoim pierwszym językiem), to fakt, że Railsy tłumaczą nieregularne liczby mnogie w języku angielskim. Więc jeśli masz model o nazwie „Foot”, odpowiedni kontroler musi być nazwany „FeetController”, a nie „FootsController”, jeśli chcesz, aby działało „magiczne” routing (i wiele innych takich funkcji).

Klasa modeli od nazwy kontrolera

W ten sposób można uzyskać klasę modelu z nazwy kontrolera (kontekst to klasa kontrolera):

class MyModelController < ActionController::Base

  # Returns corresponding model class for this controller
  # @return [ActiveRecord::Base]
  def corresponding_model_class
    # ... add some validation
    controller_name.classify.constantize
  end
end


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow