2014-08-30 67 views
1

我決定寫小Rails模型,讓我的模型變得呆滯。 這個問題提供了可用於重新定義子彈柱的方法。 目前它的工作原理,但我不知道如果我的代碼沒有味道。 首先,我想知道是否可以使用任何快捷方式爲類變量定義getter。如何在Ruby中正確定義類變量的getters?

可能我的代碼應該重構。這裏有雲:

module Sluggable 
    extend ActiveSupport::Concern 

    included do 
    extend FriendlyId 

    slug_with :name 

    def should_generate_new_friendly_id? 
     slug.blank? || sluggable_attribute_changed? 
    end 

    def sluggable_attribute_changed? 
     public_send("#{self.class.sluggable_attribute}_changed?") 
    end 
    end 

    module ClassMethods 
    def slug_with(attribute) 
     @sluggable_attribute = attribute 

     apply_friendly_id(@sluggable_attribute) 
    end 

    def apply_friendly_id(sluggable_attribute) 
     friendly_id sluggable_attribute, use: %w(slugged history) 
    end 

    def sluggable_attribute 
     @sluggable_attribute 
    end 
    end 
end 

當我使用rubocop寶石我得到sluggable_attribute類方法與我用應該使用attr_reader爲了微不足道的讀者方法通知警告。

請告訴我應該如何改進我的代碼以適應Ruby和Rails約定。

謝謝!

+0

可以爲實例變量定義訪問器,而不是類變量。我假設你指的是類實例變量,你應該使用它來代替類變量。爲類實例變量定義訪問器的正常方式如下所示:'class << self; attr_accessor var; end'。另請參閱[cattr_accessor](http://apidock.com/rails/Class/cattr_accessor)。 – 2014-08-30 20:18:19

回答

1

既然你是在Rails的上下文中,我推薦你'class_attribute'方法(doc here)。在我看來最適合用於鐵軌寶石。