Имена единственного или множественного числа контроллеров и помощников в Rails - PullRequest
109 голосов
/ 15 марта 2009

Есть ли какой-либо недостаток в использовании единичных имен для контроллеров и помощников? Кажется, ничто не может положиться на это. Даже кажется, что помощники не должны делать такой же выбор в отношении единственного или множественного числа, как их соответствующие контроллеры, по крайней мере, согласно моим ограниченным экспериментам. Это правда?

Ответы [ 9 ]

152 голосов
/ 01 октября 2010

Определенно во множественном числе .

Со спокойной маршрутизацией и единичным контроллером

Контроллер:

dog_controller.rb  

Маршруты:

map.resources :dogs  # => blows up  
map.resources :dog  # is ok, but...  
dogs_path # => blows up  
dog_path  # => ok  

Использование контроллера множественного числа

Контроллер:

dogs_controller.rb

Маршруты:

map.resources :dogs  
dogs_path # => ok  
dog_path # => ok  

rails generate controller --help имеет множественное число примеров:

Example:
`rails generate controller CreditCards open debit credit close`

CreditCards controller with URLs like /credit_cards/debit.
    Controller: app/controllers/credit_cards_controller.rb
    Test:       test/controllers/credit_cards_controller_test.rb
    Views:      app/views/credit_cards/debit.html.erb [...]
    Helper:     app/helpers/credit_cards_helper.rb
26 голосов
/ 15 марта 2009

Использование множественных имен для контроллеров - это просто соглашение.

Множественные имена обычно звучат более естественно (особенно для контроллеров, которые напрямую связаны с конкретной моделью: Пользователь -> Пользователи и т. Д.), Но вы можете использовать все, что захотите.

Что касается помощников, то все помощники по умолчанию доступны для всех контроллеров, поэтому с технической точки зрения то, как вы называете своих помощников, совершенно не имеет значения. Еще одно соглашение - хранить вспомогательные функции контроллера в помощнике с тем же именем, что и у контроллера.

19 голосов
/ 03 августа 2010

Модель является единственной, потому что она ссылается на один объект, такой как Пользователь. Контроллер является множественным числом, потому что это элементы управления (методы) для коллекции пользователей. Как каждый называет маршруты, зависит только от этого отдельного разработчика. У меня никогда не было жалоб пользователей на то, что URL для веб-запроса является единственным или множественным числом. Конечным результатом является поддержание единого соглашения для текущих и будущих участников при обслуживании отображаемых страниц качества или запросов API для конечных пользователей.

12 голосов
/ 09 декабря 2010

У вас есть очень полное объяснение в руководствах по Rails: http://edgeguides.rubyonrails.org/routing.html#resource-routing-the-rails-default

9 голосов
/ 07 июня 2013

По соглашению Rails один контроллер обрабатывает одну модель, независимо от того, может ли существовать один или несколько экземпляров этой модели во время выполнения. Однако у вас может быть приложение Rails, в котором (некоторые из) контроллеры (и связанные представления) не связаны с какой-либо конкретной моделью, а скорее обрабатывают более сложный набор функций. В этом случае автоматическое множественное число не имеет никакого смысла.

Приложение Rails, над которым я сейчас работаю, вписывается в эту категорию, и меня просто раздражает, что Rails ожидает, что идентификаторы, которые я определяю как единственное число в одном месте, затем используются во множественном числе в других местах. Например, я мог бы хотеть определить что-то вроде этого в config/routes.rb:

  resource :dashboard, :only => [:show]

и затем я хочу, чтобы контроллер DashboardController отображал сводную информацию о некоторых аспектах приложения, собирая информацию из более чем одной таблицы базы данных. Поэтому здесь Dashboard не относится ни к одной модели приложения, и было бы странно иметь имя контроллера DashboardsController.

Я нашел хорошее решение для раздражения автоматического множественного числа в этом ответе . Короче говоря, отредактируйте файл config/initializers/inflections.rb и добавьте слова, которые вы не хотите автоматически использовать во множественном числе, к этому определению:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.uncountable %w( dashboard foo bar baz )
end
2 голосов
/ 30 сентября 2016

Соглашение об именовании контроллеров в Rails поддерживает множественное число последнего слова в имени контроллера, хотя строго не требуется (например, ApplicationController).

Например, ClientsController предпочтительнее ClientController, SiteAdminsController предпочтительнее SiteAdminControlle r или SitesAdminsController и т. Д.

Следуя этому соглашению, вы сможете использовать генераторы маршрутов по умолчанию (например, ресурсы и т. Д.) Без необходимости указывать каждый :path или :controller, и будете поддерживать использование URL-адресов и помощников пути во всем приложении.

Ссылка: Соглашение об именовании контроллеров Rails Doc

2 голосов
/ 18 февраля 2016

Если контроллер является ресурсом, то он должен быть во множественном числе ...

Например

Контроллер

articles_controller.rb

Модель

article.rb

Но вы можете использовать отдельные имена контроллеров, когда у вас нет соответствующих моделей, таких как

welcome_controller.rb
2 голосов
/ 06 января 2010

Я чувствую себя лучше, когда использую единственное число для имени контроллера

1 голос
/ 15 марта 2009

Использование множественного числа звучит лучше, и тогда, если у вас есть контроллер, который обрабатывает единичный ресурс, то есть пользователя, вы все равно можете назвать URL /user.

С помощниками часто нет необходимости иметь помощника для каждого контроллера, и часто бывают вспомогательные методы, которые вы можете использовать ascorss для нескольких контроллеров, а вместо этого замусоривать их все через помощника приложения, вместо этого вы можете поместить их в пользовательские помощники, например layout_helper или любой другой файл с хорошо названным именем.

...