2010-09-30 58 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