1

ネストされたリソースのルーティングに関するRailsガイドに従って、2つのモデルと私のルートが次のようになります:

# media.rb
class Media < ActiveRecord::Base
  has_many :captions, class_name: "Captions", dependent: :destroy
end

# captions.rb
class Captions < ActiveRecord::Base
  belongs_to :media
end

# routes.rb
resources :medias do
   resources :captions
end

実行するrake routes | grep captionsと、次のようになりますが、これは正しくないようです。私のアクションのいくつかは、私が期待するようにネストされていません:

   media_captions  GET     /medias/:media_id/captions(.:format)      captions#index
                   POST    /medias/:media_id/captions(.:format)      captions#create
new_media_caption  GET     /medias/:media_id/captions/new(.:format)  captions#new
    edit_captions  GET     /captions/:id/edit(.:format)              captions#edit
         captions  GET     /captions/:id(.:format)                   captions#show
                   PUT     /captions/:id(.:format)                   captions#update
                   DELETE  /captions/:id(.:format)                   captions#destroy

ご覧のとおり、indexおよびcreateアクションは適切にネストされていますが、他のアクションはネストされていません。なぜこれが起こっているのか誰でも説明できますか?

4

3 に答える 3

2

あなたの「キャプション」クラスが複数だからですか?慣例に従っていないと、苦痛を感じることになります。キャプション クラスのファイル名は次のようにcaption.rbなります。

class Caption < ActiveRecord::Base
  belongs_to :media
end
于 2013-10-11T17:20:40.947 に答える
0

キャプションがどのメディアに属しているかに関係なく、キャプションが編集されていることを明示するために、ルートがこのように構築されていると思います。

has_and_belongs_to_manyキャプションが複数のメディアに属する関係を考えてみましょう。次のルートがある場合:

/medias/1/captions/10/edit
/medias/5/captions/10/edit

編集するのはキャプション 10 だけです。ルートは冗長になります。これは次のように簡単に書くことができます。

/captions/10/edit

ただし、メンバー ルートの下にネストされたアクションを使用することは、「このindexメディアのキャプションを表示する」ことを意味するため、明示的に述べる必要があります。

/medias/1/captions

newまたはや などのアクションについてcreateは、「このメディアのキャプションを作成する」と言っています。ここでも、特定のルートが必要です。

/medias/1/captions/new

見た目からすると、複数形化に関してかなりの問題に直面している可能性があります。慣例に合うようにルートを調整するか、命名法の新しい標準を考案することを検討します.

于 2013-10-11T17:33:46.807 に答える