我有用户模型和个人资料模型。
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
有没有办法让这项工作?
答案 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的工作方式非常相似。