在url中,如何在rails上的ruby中显示title-name而不是id?

时间:2015-07-07 07:43:55

标签: ruby-on-rails ruby ruby-on-rails-4 ruby-on-rails-4.1 ruby-on-rails-4.2

我正在使用rails 4和ruby 2。我在rails应用程序中创建了一个博客部分。我需要更改显示页面中的网址。我的问题是,我希望我的网址中的标题而不是ID。我想要http://www.domain.com/articles/blog_title而不是http://www.domain.com/articles/9。我怎样才能做到这一点?如果有人对此有任何想法,请与我分享。

我的代码:

ArticlesController:

def index
    @articles = Article.all
    @articles = Article.paginate(:page => params[:page], :per_page => 5).order('created_at DESC')
end

def show
  @article = Article.find(params[:id])
end

private

def article_params
  params.require(:article).permit(:title, :body)
end

routes.rv

resources :articles

2 个答案:

答案 0 :(得分:6)

为此目的有一个很棒的宝石,名为friendly_idhttps://github.com/norman/friendly_id

在你的文章模型中,你只需要添加它,

extend FriendlyId
friendly_id :name, use: :slugged

还有许多其他选项,您需要查看文档。

希望有所帮助!

答案 1 :(得分:5)

实际上你可以覆盖to_param方法。 你不需要有任何宝石。

如果你有slug列,那么就把

def to_param
    self.slug.parameterize
end

如果你想带标题,那么

def to_param
    self.title.parameterize
end

请记住将slug或标题栏(无论您使用哪个)编入索引,以便更快地进行搜索。