0

目前在我的消息表上使用friendly_id。消息被访问是这样的:如何使friendly_id gem使用来自其他模型的属性?

site.com/messages/id e.g. site.com/messages/8 

我想用这样的:

site.come/messages/username e.g. site.com/messages/terrytibbs 

我已经得到了创业板工作的罚款,我的“身体”属性测试了我消息表。发送短信“测试”,并尝试使用site.com/messages/test访问它,它工作正常。

但是我需要使用用户名来做到这一点。我想知道是否有方法访问另一个模型属性,因为我的用户名存储在我的用户表中。我总是可以在我的邮件列表中创建一个用户名列,并将他们的用户名保存在那里,但不喜欢当我已经拥有另一个用户名列的想法。

由于我的表格已链接,因此可以使用他们的sender_id或recipient_id轻松找出邮件发件人或收件人用户名,因为它们与我的用户表中的ID相匹配。

有没有一种快速简单的方法来做我想做的事情,还是我不得不求助于在我的消息表中创建一个用户名列?

亲切的问候

回答

0

@sevenseacat是正确的,但我相信你将有一个路线冲突的方法:

/messages/:id 
/messages/:username 

或许路线应该更像/用户/:ID /信息,这将是消息的下一个嵌套路线用户

resources :users do 
    resources :messages, only: [:index] 
end 

运行rake routes查看生成的路由。在你MessagesController,您将收到:USER_ID并能够轻松地拨打:

User.find(params[:user_id]).messages 

请确保您有has_many :messages在您的用户模式工作。

+0

啊,是的!我有路线冲突。我想知道为什么在我做出的更改后site.com/id停止工作。只是想保持URL清洁。有些方法可以做到这一点,但对于如此简单的事情来说,它们似乎是一种可笑的漫长方式。我希望它没有打扰我,我可以继续做下去。也许你的建议是我现在最好的选择。 – LondonGuy

+0

阅读您对@sevenseacat的评论后,可能所有这些可能都太多了。如果你有一个current_user登录,你可以简单地调用他的.messages。但是如果你想公开显示其他用户的消息,你需要我的建议。 – mathieugagne

0

这没有意义做的,是不是有什么friendly_id是 - /messages/8将加载一个消息的单个实例,同时与/messages/terrytibbs取代它大概会加载列表由用户terrytibbs接收/发送的消息。

我会在messages下创建一个正常的收集路线,例如。 get :username然后加载用户 - >获取他们的消息,在那个动作中。

+0

这不是我建立我的系统的方式。它会加载第一条消息,然后第一条消息中的孩子就是那个对话中的所有其他消息。如果以terrytibbs身份登录并键入另一个用户名,它将加载他与该用户之间的对话。在该对话中,两个用户和第一个消息之间只有一次对话。 – LondonGuy

相关问题