关于URL友好链接的问题

时间:2010-09-30 22:38:50

标签: ruby-on-rails url routes

我想让我的网址看起来像这样:

example.com/posts/id_of_post/title_of_post

我在控制器中有这个:

match ':controller/:id/:link', :controller => 'posts', :action => 'show'

说我有一个帖子列表..如何链接到它们?

<%= link_to 'Show', post %>

只提供通常/帖子/ ID

另一方面,当我创建一个帖子并将其存储在数据库中时,我正在创建一个友好的URL链接。在飞行中创建会更好吗?这可能/更好吗?

我在回答另一个问题时看到了这一点:

def to_param
  normalized_name = title.gsub(' ', '-').gsub(/[^a-zA-Z0-9\_\-\.]/, '')
  "#{self.id}-#{normalized_name}"
end

如果我可以将 - 更改为/,那将会有效。可能的?

2 个答案:

答案 0 :(得分:1)

我建议这样做而不是gsub的东西:

def to_param
  "#{self.id}-#{title.parameterize}"
end

缺点是,如果标题发生变化,则URL会发生变化。这是一个挫折。

所以很多实现都会这样做

before_create :permanize

def permanize
  permalink = title.parameterize
end

def to_param
  "#{self.id}-#{permalink}"
end

答案 1 :(得分:0)

这就是我所做的:

我将此添加到我的帖子#create:

@post.link = (@post.title.parameterize)

我会给用户提供在发布后最多5分钟编辑标题的选项。

我的路线:

match "/posts/:id/:link" => "posts#show", :as => "story"

和帖子的索引视图

<%= link_to 'Show', story_url(post, post.link) %>