1
필자의 모델을 슬러그 가능하게 만드는 작은 레일즈 모델 관심사를 작성하기로 결정했습니다. 이 문제는 슬러그 열을 다시 정의하는 데 사용할 수있는 방법을 제공합니다. 현재 작동하지만 코드에 냄새가 나는지 확실하지 않습니다. 우선 클래스 변수에 getter를 정의하기위한 바로 가기를 사용할 수 있는지 알고 싶습니다.Ruby에서 클래스 변수에 대한 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
나는 내가 사소한 리더 방법에 대한 attr_reader
을 사용하여야 통지 sluggable_attribute
클래스 메소드에 대한 경고를 얻을 rubocop
보석을 사용하는 경우.
Ruby 및 Rails 규칙에 맞게 코드를 개선해야하는 방법을 알려주십시오.
감사합니다.
클래스 변수가 아닌 인스턴스 변수에 대해 접근자를 정의 할 수 있습니다. 어쨌든 클래스 변수 대신 클래스 인스턴스 변수를 사용한다고 가정합니다. 클래스 인스턴스 변수에 접근자를 정의하는 일반적인 방법은 다음과 같습니다 :'class << self; attr_accessor var; 끝 '. 또한 [cattr_accessor] (http://apidock.com/rails/Class/cattr_accessor)를 참조하십시오. –