我正在使用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
答案 0 :(得分:6)
为此目的有一个很棒的宝石,名为friendly_id
,https://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或标题栏(无论您使用哪个)编入索引,以便更快地进行搜索。