0

我不确定应该如何为私人消息构建路由。当用户单击票证时,它会显示票证详细信息以及向用户发送有关票证的消息的选项。但是,新的消息路由看起来像users/:username/messages/new,但它应该反映用户(发送者)正在向另一个用户(接收者)发送关于当前正在查看的票证的消息。我怎样才能使我的路由 RESTful?

模型可以在这里找到:receiver_id not Saving - rails messages

编辑

我最终将我的 routes.rb 更改为:

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

定义多个资源有什么缺点吗?

4

1 回答 1

3

通常,发送消息的用户不需要在路径中表示,因为该用户是通过当前用户会话标识的,因此留下了收件人、票证和创建新消息的操作,必须由路径。

剩下的东西可以用嵌套集合表示,嵌套的顺序有些随意,除了消息集合应该是嵌套最深的,因为这将接收“新”动作。嵌套的选项是票证、收件人、消息或收件人、票证、消息。对我来说,第一次嵌套似乎更直观。

...所以在您的 routes.rb 文件中...

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

这会给你一个路径/tickets/[ticket-id]/recipients/[recipient-id]/messages/new。请注意,id 不必是记录的数字 id。您的控制器可以决定如何从参数中查找记录,并且您可以#to_param在模型上定义以控制路径辅助方法将使用什么。

当对匹配该模式的路径的请求被路由时,它将调用:ticket_id 和 :recipient_id的#new方法MessagesController并接收值。#params

于 2012-05-01T05:36:32.760 回答