0

プライベート メッセージのルートをどのように構築すればよいかわかりません。ユーザーがチケットをクリックすると、チケットの詳細と、チケットに関してユーザーにメッセージを送信するオプションが表示されます。ただし、新しいメッセージ ルートは のようusers/:username/messages/newに見えますが、現在表示されているチケットに関して、ユーザー (送信者) が別のユーザー (受信者) にメッセージを送信していることを反映する必要があります。ルートを RESTful にするにはどうすればよいですか?

モデルはここにあります: receiver_id が保存されていません - Rails メッセージング

編集

私は自分のroutes.rbを次のように変更しました:

resources :users do
  resources :tickets do
    resources :messages
  end
end
resources :tickets

複数のリソースを定義することのデメリットはありますか?

4

1 に答える 1

3

一般に、メッセージを送信するユーザーはパスで表す必要はありません。そのユーザーは現在のユーザー セッションを介して識別されるため、受信者、チケット、および識別される必要がある新しいメッセージを作成するアクションが残ります。パス。

これらの残りのものはネストされたコレクションで表すことができ、ネストの順序はいくぶん恣意的ですが、messages コレクションは「新しい」アクションを受け取るため、最も深くネストする必要があります。ネストのオプションは、チケット、受信者、メッセージまたは受信者、チケット、メッセージです。私には、最初のネスティングの方が直感的に思えます。

...したがって、routes.rbファイルで...

resources :tickets do
  resources :recipients do
    resources :messages
  end
end

それはあなたにのパスを与えるでしょう/tickets/[ticket-id]/recipients/[recipient-id]/messages/new。ID は、レコードの数値 ID である必要はないことに注意してください。コントローラーはパラメーターからレコードを検索する方法を決定でき#to_param、モデルで定義して、パス ヘルパー メソッドが使用するものを制御できます。

そのパターンに一致するパスへのリクエストがルーティングされると、の#newメソッドが呼び出され、:ticket_id と :recipient_id のMessagesController値が受信されます。#params

于 2012-05-01T05:36:32.760 に答える