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

In url, how to show title-name instead of id in ruby on rails?

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

我的代码:

文章控制器:

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

有一个很棒的 gem 用于此目的,名为 friendly_idhttps://github.com/norman/friendly_id

在你的 Article 模型中你只需要添加这个,

extend FriendlyId
friendly_id :name, use: :slugged

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

希望对您有所帮助!

实际上您可以覆盖 to_param 方法。 您不需要为此设置任何 gem。

如果您有 slug 列,则只需输入

def to_param
    self.slug.parameterize
end

如果你想要标题那么

def to_param
    self.title.parameterize
end

请记住为 slug 或标题列(无论您使用哪个)建立索引以加快搜索速度。