2010-09-30 56 views
2

我试图让我的网址看起来像这样:问题有关URL友情链接

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

这是我做过什么:

我将此添加到我的帖子#创建:

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

我会给用户选项可以在发布后最多5分钟内编辑标题。

我的路线:“ - ” ID和永久之间

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

和我的职位

<%= link_to 'Show', story_url(post, post.link) %> 
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 
+0

索引视图反正是有一个“/”,而不是一个做到这一点? '%2f%'在翻滚时显示'/',但当您单击它时会更改为'%2f'并且不起作用。在Firefox中无论如何.. – 2010-10-01 00:03:25

+0

不,不使用to_params。你想要的是匹配':controller /:id /:link',:controller =>'posts',:action =>'show',:as =>:post_link ...... <%= link_to '显示',post_link_path(@post,:link => @ post.permaname“%> – 2010-10-01 01:03:38

+0

有没有一种方法可以用参数化定义长度? – 2010-10-09 09:55:48