1

Ruby on Rails 3.0.9を使用しています。クラス名からコントローラ名を作成したい場合はRoR命名規則に従います。たとえば、Articles::Commentクラスがある場合はarticles/comments文字列を取得したいと考えています。RoR規約に従ったクラス名からコントローラ名を取得します

おそらく、これらの規則を内部的に扱うために開発者によって作成されたRoRメソッドが存在しますが、それはわかりません。

上記の例のようにコントローラ名を取得するにはどうすればよいですか?

答えて

3

アンダースコア方式をお探しの場合は、 More info here

"Articles::Comment".underscore 

それとも、あなたはコントローラクラス自体を持っているならば、それはこのようになります:

Articles::Comment.name.underscore 

EDITルートのよう

は、彼らが1箇所ずつ構築されていますあなたがそれらを名前空間にしても。あなたはこのような何かするとき:行うに起こっているレール

map.resources :articles do |articles| 
    articles.resources :comments 
end 

を最初に、次のとおりです。

"articles". classify # which yields "Article" then rails is going to append "Controller" to it 

は、その後、「コメント」を取得し、同じことをするつもりだが、これがために起こっています"/ articles"の下にルーティングされます。 Railsは内部リソースの名前空間を持たないので、コントローラはCommentsControllerでなければならず、Articles :: CommentsControllerでなければなりません。

だけにして、あなたは明らかに何かを名前空間、Railsはあなたのクラスの名前空間に起こっている:

map.namespace :admin do |admin| 
    admin.resources :articles # will require controller "Admin::ArticlesController" 
end 

私はそれが今より明確に願っています。

+0

あなたのコードを使って、私は 'pluralize'メソッドも呼び出す必要があります...しかし、これはRoRがこれらの命名規則を内部的に扱う方法です。 – Backo

+0

あなたの質問が間違っているように見えますが、私は複数形に気づいていませんでした。これはRailsがroutesの名前ではなくarticles_comment_pathのようにパスの名前を生成する方法です。ルート上の各部分はそれ自身の名前です、それはクラス名tableize'dです。 –

+0

コントローラーの命名規則をカバーするように更新されました。 –

関連する問題