友好的URL问题,扭曲

时间:2009-09-04 08:30:09

标签: ruby-on-rails models friendly-url slug

我有用户模型和个人资料模型。

user has_one :profile profile belongs_to :user

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

我不确定我的问题是否有解决办法。这里是: 我想显示SEO友好的网址。我正在考虑使用friendly_id。但是,我们的配置文件适用于企业,它是我们想要放入网址的商家名称。问题是我们的用户模型故意不要求商家名称,而且user_id当前显示在网址中。

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

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

当我更新个人资料时,friendly_id通过将个人资料中的商家名称放入网址的user_id部分来确实对网址进行了细分。但是,当然,这引起了例外。

因此,如果配置文件模型中的商家名称是Mike's Bar,则网址现在为/ users / mike-s-bar / profile。例外情况说明:找不到具有ID=mike-s-bar.

的用户

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

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

有没有办法让这项工作?

1 个答案:

答案 0 :(得分:0)

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

否则:我认为friendly_id不能处理models表之外的列。不过这是我尝试的方法:

class User

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

  ...
end

find方法会自动跳过短划线后面的所有内容。这会导致您的网址的可读性稍差:/users/xzy/profile将变为/users/7-xzy/profile,这与SO的工作方式非常相似。