Slug url - routes.rb需要什么?

时间:2013-02-22 07:38:09

标签: ruby-on-rails ruby-on-rails-3

快速提问。

我在帖子控制器中创建了一个slug方法,以便@ post.slug返回(ex)“this-is-the-name-name”。

不知道在我的routes.rb文件中要做什么,以使其工作('posts / this-is-the-name-name'),我没有找到一个非常适合的问题或指南答案。知道怎么做吗?

3 个答案:

答案 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,因为它是积极开发的,并且有很多很好的选择,并且使打击非常简单。

FriendlyId