0

我有一个用户模型和一个配置文件模型。

user has_one :profile profile belongs_to :user

由于这种关系,我通过调用用户 ID 来提取我的个人资料。所以我的网址看起来像这样:website.com/users/[user_id]/profile

我不确定我的问题是否有解决方案。这里是:我想显示 SEO 友好的 url。我正在考虑使用friendly_id这个。但是,我们的个人资料是针对企业的,它是我们希望在 url 中输入的企业名称。问题是我们的用户模型故意不要求提供公司名称,并且它是user_id当前显示在 url 中的。

有没有办法从配置文件模型中获取企业名称(即@profile.name),并使用它来填充 url 的 [user_id] 部分?

更新:我已经设置了friendly_id gem,看起来这可以工作。在我的个人资料模型中,我有这个:has_friendly_id :name, :use_slug => true

当我更新个人资料时,friendly_id确实通过将个人资料中的企业名称放入 url 的user_id一部分来对 url 进行 slugify。但是,当然,这引发了异常。

因此,如果配置文件模型中的企业名称是 Mike's Bar,则 url 现在显示为 /users/mike-s-bar/profile。例外情况是这样的:找不到用户ID=mike-s-bar.

这是我的个人资料控制器:

def show
  @user = User.find(:all)
  @profile = User.find(params[:user_id])
end  

有没有办法使这项工作?

4

1 回答 1

0

嗯,一个企业有多个用户吗?如果是这样,那怎么可能/users/xzy/profile是独一无二的?

否则:我不认为friendly_id 可以处理模型表之外的列。但是在这里我会尝试一种方法:

class User

  # used by rails to generate URLs - defaults to ID
  def to_param
    "#{self.id}-#{self.business.name}"
  end

  ...
end

find方法本身会跳过破折号后面的所有内容。这将导致您的 URL 的可读性降低:/users/xzy/profile将变得 /users/7-xzy/profile 与 SO 的做法非常相似。

于 2009-09-04T10:10:21.940 回答