我想让我的网址看起来像这样:
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
如果我可以将 - 更改为/,那将会有效。可能的?
答案 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) %>