ruby-on-rails 쇼핑몰 Ruby on Rails:모델 간의 공유 방법



루비온레일즈 쇼핑몰 (2)

내 모델 중 일부에 개인 정보 열이있는 경우 모든 모델에서 공유하는 하나의 메서드를 작성할 수있는 방법이 있습니까? is_public을 호출 할 수 있습니까?

그래서, object_var.is_public 할 수있게하고 싶습니다?


가능한 한 가지 방법은 공유 된 메소드를 다음과 같은 module 에 넣는 것입니다 ( RAILS_ROOT/lib/shared_methods.rb ).

module SharedMethods
  def is_public?
    # your code
  end
end

그런 다음이 방법을 사용해야하는 모든 모델 (예 : app/models/your_model.rb )에이 모듈을 포함해야합니다.

class YourModel < ActiveRecord::Base
  include SharedMethods
end

업데이트 :

Rails 4에는 새로운 방법 이 있습니다. lib 대신에 app/models/concerns 에 이와 같은 공유 코드를 두어야한다.

또한 클래스 메소드를 추가하고 다음과 같이 포함하도록 코드를 실행할 수 있습니다.

module SharedMethods
  extend ActiveSupport::Concern

  included do
    scope :public, -> { where(…) }
  end

  def is_public?
    # your code
  end

  module ClassMethods
    def find_all_public
      where #some condition
    end
  end
end

또한 공유 된 메소드를 포함하는 공통 조상으로부터 모델을 상속하여이를 수행 할 수 있습니다.

class BaseModel < ActiveRecord::Base
  def is_public?
    # blah blah
   end
end

class ChildModel < BaseModel
end

실제로, 의 접근법은 종종 더 잘 작동하기 때문에 OOP 이론에 대한 사랑만으로 상속을 사용하도록 의무를 느끼지 않아야합니다. :)





ruby-on-rails