1

可能重复:
通过 ruby​​ 制作漂亮的 url

我环顾四周,但找不到答案。我要么没有问正确的问题和/或我没有找对地方。

我定义了以下内容:

config/routes.rb
resources :members

members_controller.rb
def show
@member = Member.find(params[:id])
end

截至目前,显示成员时,URL 为http://myapp.tld/members/1。假设成员的名字是cooldude。如果可能的话,显示http://myapp.tld/members/cooldude甚至http://myapp.tld/cooldude 有多难

谢谢你的帮助。

4

1 回答 1

3

我推荐friendly_id,但如果你想推出自己的解决方案,这应该让你开始:

  1. 向模型添加slug字段
  2. 保存前设置slug字段
  3. 在您的模型中覆盖to_param以返回slug而不是id

设置您的模型:

# member.rb
before_save do
  self.slug = name.parameterize
end

def to_param
  slug
end

将您的取景器更改为:

# members_controller.rb
def show
  @member = Member.find_by_name!(params[:id])
end

请注意,find_by_name!(看到爆炸了吗?)将引发ActiveRecord::RecordNotFound异常而不是返回nil。在生产中,这将自动显示 404 页面。

在您的视图中,您可以使用member_path(@member)which 现在将返回/members/cool-dude而不是/members/1.

查看文档:

于 2012-10-15T02:56:21.360 回答