快速提问。
我在帖子控制器中创建了一个slug方法,以便@ post.slug返回(ex)“this-is-the-name-name”。
不知道在我的routes.rb文件中要做什么,以使其工作('posts / this-is-the-name-name'),我没有找到一个非常适合的问题或指南答案。知道怎么做吗?
答案 0 :(得分:6)
resources :posts
然后,要使用slug作为参数,您需要在帖子模型中定义to_param
方法。
# post.rb
def to_param
slug
end
url_for调用此方法将对象转换为url。例如
>> @post.slug = 'this-is-the-post-name'
>> post_path(@post) = '/posts/this-is-the-post-name'
你需要注意的另一件事是获取记录。因为网址不再包含帖子的ID,所以你必须通过slug搜索。例如,在show action
中def show
# this will not work anymore
# @post = Post.find params[:id]
# you should change this to
@post = Post.find_by_slug params[:id]
end
答案 1 :(得分:5)
扩展jvnill的答案,确保slug是post表上的一列,应该是唯一的,否则你会遇到问题。
答案 2 :(得分:-1)
虽然滚动自己总是一个很好的学习经验,但使用能够处理敲击的宝石可能更实际。我通常会转向FriendlyId
,因为它是积极开发的,并且有很多很好的选择,并且使打击非常简单。