1

可能重复:
making a pretty url via rubyRuby on Rails的:显示会员的名称,而不是ID在展会

我环顾四周,但我无法找到答案。我要么没有提出正确的问题,要么我没有找到正确的地方。

我有以下定义:

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有多难?

感谢您的帮助。

回答

3

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

  1. 节省
  2. slug场到模型
  3. 设置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!将引发ActiveRecord::RecordNotFound异常,而不是返回nil。在制作中,这将自动显示一个404页面。

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

退房文档:

+0

谢谢哥们,非常有帮助!这正是我需要的。 :) –

+0

很高兴帮助:) – tristanm

相关问题