コントローラーとヘルパーに単数形の名前を使用することに不利な点はありますか?これに依存しているようには見えません。少なくとも私の限られた実験によれば、ヘルパーは対応するコントローラーとして単数と複数について同じ選択をする必要がないようです。本当?
コントローラーとヘルパーに単数形の名前を使用することに不利な点はありますか?これに依存しているようには見えません。少なくとも私の限られた実験によれば、ヘルパーは対応するコントローラーとして単数と複数について同じ選択をする必要がないようです。本当?
回答:
間違いなく複数。
コントローラ:
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
コントローラに複数の名前を使用するのは慣例にすぎません。
通常、複数の名前はより自然に聞こえます(特に、特定のモデルに直接関連付けられているコントローラーの場合:ユーザー->ユーザーなど)。好きなように使用できます。
ヘルパーについては、すべてのヘルパーがデフォルトですべてのコントローラーで使用可能であるため、技術的には、ヘルパーの名前の付け方はまったく問題ではありません。コントローラーのヘルパー関数を、コントローラーと同じ名前のヘルパーに保持することは、もう1つの規則です。
Railsガイドで非常に完全な説明があります:http : //edgeguides.rubyonrails.org/routing.html#resource-routing-the-rails-default
実行時にそのモデルの1つ以上のインスタンスが存在できるかどうかに関係なく、1つのコントローラーが1つのモデルを処理するのはRailsの規則です。ただし、コントローラー(および関連するビュー)が特定のモデルに関連付けられておらず、より複雑な機能セットを処理するRailsアプリケーションを使用できます。この場合、自動複数化は意味がありません。
私が現在取り組んでいるRailsアプリケーションはこのカテゴリーに当てはまり、Railsが1つの場所で単数形として定義した識別子が他の場所で複数の形で使用されることを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
Railsでのコントローラーの命名規則では、厳密には必須ではありませんが、コントローラーの名前の最後の単語の複数形化が優先されます(たとえば、ApplicationController
)。
たとえば、ClientsController
がにClientController
、r SiteAdminsController
がに、が好ましい、などです。SiteAdminControlle
SitesAdminsController
この規則に従うことで、:path
orやを修飾する必要なく、デフォルトのルートジェネレーター(リソースなど)を使用できるように:controller
なり、URLとパスヘルパーの使用法をアプリケーション全体で一貫させることができます。
コントローラ名に単数形を使用すると気分が良くなります
コントローラがリソースの場合、複数である必要があります...
例えば
コントローラ
articles_controller.rb
型番
article.rb
ただし、次のような対応するモデルがない場合は、単一のコントローラー名を使用できます。
welcome_controller.rb
複数形を使用した方がいいように聞こえますが、単一のリソース、つまりユーザーを処理するコントローラーがある場合は、URLに/ userという名前を付けることができます。
ヘルパーを使用すると、多くの場合、すべてのコントローラーにヘルパーを用意する必要がありません。多くの場合、複数のコントローラーをアスコルスで使用できるヘルパーメソッドがあり、アプリケーションヘルパーを通してそれらすべてを散らかすことができます。たとえば、layout_helperなどのカスタムヘルパーに配置できます。他の適切な名前のファイル。