2012-05-01 52 views
0

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

模型可以在这里找到:receiver_id not saving - rails messaging

编辑

我最终改变我的routes.rb到:

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

是否有任何缺点有定义了多个资源?

回答

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以控制路径帮助器方法将使用的内容。

何时匹配图案的路径的请求被路由,它将调用的MessagesController#new方法,将在#params用于接收值:TICKET_ID和:recipient_id。

+0

很好的解释。我认为你在推荐路线中的“收件人”之后缺少斜线。 –

+0

所以我 - 现在已经修好了。谢谢。 –