0

これを伝えるのはちょっと難しいですが、すべてのコードを貼り付けないようにします。多くの領収書を含む 1 つのメールボックスを持つメンバーがいます。ヘッダーレイアウトには、呼び出すナビゲーションがあります

<%= link_to "Message Center", member_mailbox_path(current_user.member_id) %>

さまざまなモデルのリソース ページである Trails/# などのほとんどのページで機能しますが、他のページではカスタム ルート ページのように見えます。このエラーが発生します。

No route matches {:action=>"show", :controller=>"mailbox", :member_id=>16}

rake routes を実行すると、次のようになります。

member_mailbox GET    /members/:member_id/mailbox/:id(.:format)      mailbox#show

ルートは私を混乱させます。これがこの問題に対する私のルートです (メッセージの表示はまだテストされていません) ...

resources :members do
 resources :mailbox do
  resources :receipts do
    member do
      get :show_message
    end
  end
 end
end

エラーが表示されているページのルートは次のようになります

match '/my_plays', :to => "trails#my_plays"
match '/my_creations', :to => "trails#my_creations"

私のルートが正しいかどうかはわかりません。resources :mailbox が正しいかどうかは疑問ですが、そのためのリソースがたくさんないので、has_one です .... THX

----編集--- アドバイスごとにルートを変更した後:

member_mailbox POST   /members/:member_id/mailbox(.:format)                            mailboxes#create
new_member_mailbox GET    /members/:member_id/mailbox/new(.:format)                       mailboxes#new
edit_member_mailbox GET    /members/:member_id/mailbox/edit(.:format)                      mailboxes#edit
                    GET    /members/:member_id/mailbox(.:format)                           mailboxes#show
                    PUT    /members/:member_id/mailbox(.:format)                           mailboxes#update
                    DELETE /members/:member_id/mailbox(.:format)                           mailboxes#destroy
4

1 に答える 1

0

メールボックスをルート内の単一のリソースとして定義したい場合があります。member_mailbox_pathそれ以外の場合、Rails はにルーティングするためにユーザー ID とメールボックス ID の両方を渡すことを期待しますmailbox#show。これがルーティングエラーが発生する理由だと思います。各ユーザーには 1 つのメールボックスがあるため、この追加のルックアップをルートの一部にする必要はありません。の代わりにresources :mailbox、次のことができますresource :mailbox

resources :members do
  resource :mailbox do
    resources :receipts do
      member do
        get :show_message
      end
     end
  end
end

これにより、次のルートが生成されると思います。

                 member_mailbox POST   /members/:member_id/mailbox(.:format)                           mailboxes#create
             new_member_mailbox GET    /members/:member_id/mailbox/new(.:format)                       mailboxes#new
            edit_member_mailbox GET    /members/:member_id/mailbox/edit(.:format)                      mailboxes#edit
                                GET    /members/:member_id/mailbox(.:format)                           mailboxes#show
                                PUT    /members/:member_id/mailbox(.:format)                           mailboxes#update
                                DELETE /members/:member_id/mailbox(.:format)                           mailboxes#destroy

GET、PUT、および DELETE の横にパス名がないからといって、それらが存在しないわけではないことに注意してください。それらは POST パスの単なる繰り返しですが、それぞれが異なる HTTP メソッドに応答します。

をレンダリングするには、show ルートを使用してmailboxes#showを追加する必要があります。これにより、メンバーの検索が行われる可能性があります。MailboxesController

class MailboxesController < ApplicationController

  def show
    @member = Member.find(params[:member_id])
    # other mailbox code...
  end

end 

app/views/mailboxes/show.html.erbまた、メールボックスの表示ページをレンダリングするためのテンプレートも作成します。

また、第 3 レベルの :receipts のように、ルートを深くネストしないことをお勧めします。

于 2012-10-09T17:26:45.967 に答える