2017-01-15 56 views
0

使用Rails 4.2,我想使用attr_accessor而不是表列創建自定義路由,但我無法使resource_path方法正常工作。使用自定義屬性而不是表列的路徑

我想要這樣的自定義路線:/foos/the-title-parameterized-1(其中「1」是對象的id)。

Foo型號:

#... 
attr_accessor :slug 
#dynamically generate a slug: 
def slug 
    "#{self.title.parameterize[0..200]}-#{self.id}" 
end 
#... 

routes.rb

get 'foos/:slug' => 'foos#show', :as => 'foo' 

foos_controller.rb

def show 
    @foo = Foo.find params[:slug].split("-").last.to_i 
end 

在我show視圖,當我使用的輔助方法foo_path返回使用012路線的對象而不是slug這樣的:/foos/1。是否有可能得到這個輔助方法來使用訪問器方法?我用這種方法跟蹤了嗎?

我寧願使用Friendly Id但我不相信它可能沒有在我的模型表中創建一個slug列。我不想創建一個列,因爲有數百萬條記錄。

回答

1

要改寫模型中的to_param method

class Foo < ActiveRecord::Base 
    # ... 
    def to_param 
    slug 
    end 

    # or 
    alias :to_param :slug 
end 

您可能還需要使用:constraints option在你的路線,這樣只匹配例如該網址/-\d+\z/匹配。

請記住,使用此方法,路徑/foos/i-am-not-this-foos-slug-123將導致與/foos/i-am-this-foos-slug-123相同的記錄。

+0

不知道約束選項 - 有用的東西,謝謝。 – joshweir

相關問題