在 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_id
、https://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 或标题列(无论您使用哪个)建立索引以加快搜索速度。
我正在使用 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_id
、https://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 或标题列(无论您使用哪个)建立索引以加快搜索速度。