2014-02-15 39 views
2

Rails很新,遇到了一個我似乎無法理解的問題。Rails:在ActiveRecord中使用不同的模型字段關注

我有2個機型,用戶&發佈。用戶將具有「名稱」屬性,帖子將具有「標題」屬性。

在這兩種情況下,我還想保留一個slug,在before_save中將適當的列轉換爲「sluggified」版本並將其作爲slug存儲。我已經有了我想要的邏輯,並且已經有了這個工作,但是,我想將行爲抽象爲關注點。

我似乎無法找到一種方法來設置它 - 主要是因爲源字段的動態特性。我希望能夠做到像下面這樣:

class User < ActiveRecord::Base 
    include Sluggable 

    act_as_slug :name 
end 

class Post < ActiveRecord::Base 
    include Sluggable 

    act_as_slug :title 
end 

不幸的是,不管是什麼我已經試過就備受關注的實施,我碰到牆壁。

雖然我想知道哪種類型的實現方式是可行的,但我也有興趣知道這是否是一個很好的用例。

回答

3

這似乎工作,在任何人正在尋找答案(絕對開放給那些有更多經驗的人更好的建議)。模型看起來像原來的帖子中建議的。

module Sluggable 
    extend ActiveSupport::Concern 

    included do 
    before_save :generate_slug 
    class_attribute :sluggable_attribute 

    def generate_slug 
     self.sluggify(self.class.sluggable_attribute) 
    end 

    def sluggify(attribute) 
     # Sluggify logic goes here 
    end 
    end 

    module ClassMethods 
    def acts_as_slug(value) 
     self.sluggable_attribute = value 
    end 
    end 
end 
相關問題