我环顾四周但找不到答案。我或者要么没有问正确的问题和/或我找不到合适的地方。
我有以下定义:
config/routes.rb
resources :members
members_controller.rb
def show
@member = Member.find(params[:id])
end
截至目前,在展示会员时,网址为http://myapp.tld/members/1。让我们说会员的名字是cooldude。如果可能,显示http://myapp.tld/members/cooldude甚至http://myapp.tld/cooldude会有多难?
感谢您的帮助。
答案 0 :(得分:3)
我建议使用friendly_id,但如果你想推出自己的解决方案,这应该可以让你开始:
slug
字段slug
字段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!
(请参阅bang?)会引发ActiveRecord::RecordNotFound
例外,而不是返回nil
。在制作中,这将自动显示404页面。
在您的观看次数中,您可以使用现在返回member_path(@member)
代替/members/cool-dude
的{{1}}。
查看文档: