2011-07-14 20 views
2

現在我有這樣的事情如何在Rails 3中爲用戶定義的友好URL?

http://myapp.com/pages/1 
http://myapp.com/pages/2 
http://myapp.com/pages/3 
http://myapp.com/pages/4 

而且每一頁都屬於一個user

我需要的是給每個用戶設置它的頁面自定義名稱。

我想用friendly_id寶石http://norman.github.com/friendly_id/ 的,但我沒有找到任何方法來直接編輯塞設置自定義友好的URL

我應該如何進行?

+0

請看看這個其他職位: [http://stackoverflow.com/questions/4995759/creating-seo-friendly-urls-in-rails-3][1] 。希望幫助, [1]:http://stackoverflow.com/questions/4995759/creating-seo-friendly-urls-in-rails-3 –

回答

2

添加to_param方法的車型之一應該有所幫助:

def to_param 
    "#{id}-#{call_to_method_that_returns_custom_name.parameterize}" 
end 

希望這是你在找什麼:)

3

FriendlyID是一個偉大的寶石。

實現用戶定義的頁面URL不應該很難。 與user_idlink

class User < ActiveRecord::Base 
    has_many :pages 

class Page < ActiveRecord::Base 
    belongs_to :user 

    has_friendly_id :link # link is name of the column whose value will be replaced by slugged value 

創建表pagespage#new您添加的輸入爲link屬性。

或者,您可以在title或其他名稱中設置friendly_id:use_slug => true選項。通過這種方式,FriendlyID將採用標題並對其進行修改,使其不具有限制字符。它將使用它自己的表來存儲slu。。使用可提高性能。

更新

爲了使用戶選擇他們是否wan't設置自定義鏈接,你可以這樣做:

  1. 集friendly_id上沒有蛞蝓的link場..
  2. 製作虛擬屬性permalink,以便您可以在您的表單中顯示它。
  3. 在before_filter中,檢查是否設置了permalink
  4. 如果是,請將其寫入link字段。
  5. 如果不是,則將標題寫入link字段。

FriendlyID使用babosa寶石生成slu。。如果你決定使用它爲好,這是喜歡你的過濾器可以如何看:

protected 
    def generate_link 
       #you might need to use .nil? instead 
    self.link = self.permalink.empty? ? make_slug(self.title) : make_slug(self.permalink) 
    end 

    def make_slug(value) 
    value.to_slug.normalize.to_s #you could as well use ph6py's way 
    end 
+0

但是,如果我想保持它在一個領域,我有該頁面的標題字段....我可以使用'has_friendly_id:title'然後我可以使用基於標題的friendly_id去頁面,但我想給第二個選項...像'custom_link 「所以,如果用戶想要一些自定義的東西,那麼用戶需要先設置一些值,而不是「friendly_id」,而「URL」中的頁面標題會是一個很好的選擇。你怎麼看? –

+0

我已更新我的問題。請檢查一下 :) – bassneck

0

我沒有使用friendly_url寶石和我不知道我是否方式是有效率的。但它對我來說工作正常。

我有一個名爲Node的模型,其中id和友好的url字段url_title

routes.rb文件:

resource 'nodes/:url_title', :to => 'Nodes#view' 

nodes_controller.rb

class NodesController <ActiveController 
def view 
    @node = Node.find_by_url_title(:params(url_title)) 
end 
end 

,並使用@node變量來填充你的看法。

現在,無論何時輸入www.example.com/nodes/awesome-title,它都會將我帶到適當的頁面。反對此的一個論點可能需要在非主要字段上創建索引。但我認爲即使在friendly_url gem中也可能需要更好的性能。另外,非主要字段url_title需要是唯一的。同樣,即使對於friendly_url正確工作,也可能需要這樣做。 如果我在這些假設中錯了,請隨時糾正我。

0

如果你看this screencast,它會解釋給你。它很古老,但它非常相關。

0

有多種方式,就可以實現這 - 使用Stringex

2)sluggable取景器

3)由步驟方法friendly_id

的完整步驟

1)每個使用的原因可以在here找到。快樂閱讀!