如何让friendly_id gem使用另一个模型的属性?

时间:2013-02-02 14:05:13

标签: ruby-on-rails ruby-on-rails-3 rubygems ruby-on-rails-3.2 friendly-id

目前在我的留言表上使用friendly_id。消息的访问方式如下:

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

我想像这样使用它:

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

我在我的消息表中使用“body”属性测试时,我的gem工作正常。发送短信“test”并尝试使用site.com/messages/test访问它,它运行正常。

但是我需要使用用户名来执行此操作。我想知道是否有办法访问另一个模型属性,因为我的用户名存储在我的用户表中。我总是可以在我的消息表中创建一个用户名列,并在那里保存他们的用户名,但是当我已经有一个用户名列时,我不喜欢有另一个用户名列的想法。

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

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

亲切的问候

2 个答案:

答案 0 :(得分:0)

这没有意义,而且不是friendly_id的用途 - /messages/8将加载单个消息实例,而将其替换为/messages/terrytibbs可能会加载列表用户terrytibbs收到/发送的消息。

我只在messages下创建一个正常的收集路线,例如。 get :username然后加载用户 - >在那次行动中得到他们的信息。

答案 1 :(得分:0)

@sevenseacat是对的,但我相信你会有这样的路线冲突:

/messages/:id
/messages/:username

也许路线应该更像/ user /:id / messages,这将是用户

下的嵌套消息路径
resources :users do
  resources :messages, only: [:index]
end

运行rake routes以查看生成的路线。在您的MessagesController中,您将收到:user_id并且可以轻松地调用:

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

确保您的用户模型中有has_many :messages