web-dev-qa-db-ja.com

Railsの単数または複数のコントローラーおよびヘルパー名

コントローラーとヘルパーに単数形の名前を使用することに不利な点はありますか?これに依存するものはないようです。少なくとも私の限られた実験によれば、ヘルパーは対応するコントローラーとして単数形と複数形について同じ選択をする必要はないようです。本当?

110
allyourcode

間違いなく複数

安らかなルーティングと単一のコントローラーを使用

コントローラ:

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
155
jpgeek

コントローラに複数の名前を使用することは単なる慣例です。

通常、複数の名前はより自然に聞こえます(特に、特定のモデルに直接結び付けられているコントローラーの場合:ユーザー->ユーザーなど)。好きなものを使用できます。

ヘルパーに関しては、すべてのヘルパーはデフォルトですべてのコントローラーで使用できるため、技術的には、ヘルパーに名前を付ける方法はまったく関係ありません。コントローラーのヘルパー関数をコントローラーと同じ名前のヘルパーに保持することは、単なる別の規則です。

26
Can Berk Güder

モデルは、Userのような単一のオブジェクトを参照するため、特異です。コントローラーは、ユーザーのコレクションのコントロール(メソッド)であるため、複数です。ルートの名前の付け方は、その個々の開発者次第です。 WebリクエストのURLが単数形または複数形であることをユーザーから不満に思ったことはありません。最終結果は、エンドユーザーに高品質のページ表示またはAPIリクエストを提供しながら、現在および将来の貢献者に共通の規則を維持します。

19
Ryan

Railsガイド: http://edgeguides.rubyonrails.org/routing.html#resource-routing-the-Rails-default に非常に完全な説明があります。

12
Nerian

実行時にそのモデルの1つ以上のインスタンスが存在できるかどうかにかかわらず、1つのコントローラーが1つのモデルを処理するのはRailsの規則です。ただし、(一部の)コントローラー(および関連するビュー)が特定のモデルに関連付けられず、より複雑な機能セットを処理するRailsアプリケーションを使用できます。この場合、自動複数形化は意味をなしません。

現在作業中のRailsアプリケーションはこのカテゴリに当てはまります。Railsは、1か所で単数形として定義する識別子が複数形で使用されることを期待しているので、単にイライラします。他の場所で。たとえば、config/routes.rbで次のようなものを定義したい場合があります。

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

次に、コントローラDashboardControllerにアプリケーションの特定の側面に関する概要情報を表示し、複数のデータベーステーブルから情報を収集するようにします。そのため、ここでは、Dashboardはアプリケーションのモデルを参照せず、コントローラーの名前をDashboardsControllerにするのは奇妙なことです。

this answer で自動複数形のイライラに対する良い解決策を見つけました。つまり、ファイルconfig/initializers/inflections.rbを編集し、自動的に複数形にしたくない単語をこの定義に追加します。

ActiveSupport::Inflector.inflections do |inflect|
  inflect.uncountable %w( dashboard foo bar baz )
end
9
Teemu Leisti

コントローラー名に単数形を使用すると気分が良くなります

2

コントローラーがリソースの場合、複数でなければなりません...

例えば

コントローラ

articles_controller.rb

article.rb

ただし、次のような対応するモデルがない場合は、単一のコントローラー名を使用できます

welcome_controller.rb
2
user5650203

Railsのコントローラーの命名規則では、コントローラー名の最後のWordの複数形が優先されますが、厳密ではありませんrequired(例ApplicationController)。

たとえば、ClientsControllerClientControllerよりも好まれ、SiteAdminsControllerSiteAdminControllerまたはSitesAdminsControllerよりも好まれます。

この規則に従うことにより、各:path または :controller、およびアプリケーション全体でURLおよびパスヘルパーの使用法の一貫性を維持します。

参照: Controller Naming Convention-Rails Doc

複数形を使用する方がいいと思うので、単一のリソース、つまりユーザーを処理するコントローラーがある場合は、URLに/ userという名前を付けることができます。

ヘルパーを使用すると、すべてのコントローラーにヘルパーが必要になることはほとんどなく、複数のコントローラーを使用してアプリケーションヘルパー全体に散らばらせることができるヘルパーメソッドがあり、layout_helperまたはany他の適切な名前のファイル。

1
nitecoder