繁体   English   中英

如何在Ruby中为类变量正确定义getter?

[英]How to properly define getters for class variables in Ruby?

我决定写一些有关Rails模型的小文章,使我的模型易于使用。 此问题提供了可用于重新定义段塞柱的方法。 目前可以使用,但是我不确定我的代码是否没有味道。 首先,我想知道是否可以使用任何快捷方式为类变量定义getter。

可能应该重构我的代码。 它去了:

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 gem时,会收到有关sluggable_attribute类方法的警告,并注意我使用的应将attr_reader用于平凡的读取器方法。

请告知我如何改进代码以适应Ruby和Rails约定。

谢谢!

由于您处于Rails的上下文中,因此我建议您使用'class_attribute'方法( 此处为doc )。 我认为最适合Rails宝石。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM