에 방법을 위임하는 인수를 전달하는 방법은 여러 모델의 개요를 표시하는 대시 보드를 가지고 싶다, 나는 자신의 데이터없이 발표자를 사용하여 구현했습니다. 나는 (데이터 테이블없이)는 ActiveModel 클래스를 사용 : 대리인의레일
class Dashboard
attr_accessor :user_id
def initialize(id)
self.user_id = id
end
delegate :username, :password, :to => :user
delegate :address, :to => :account
delegate :friends, :to => :friendship
end
, 나는 Dashboard.address
를 호출하고 다시 Account.find_by_user_id(Dashboard.user_id).address
을 얻을 수 있어야합니다.
대시 보드는 액티브 클래스라면, 나는이 Dashboard#belongs_to :account
선언 한 수 위임이 자동으로 (즉, 계정 대시 보드 인스턴스에 to user_id
동일이 user_id
와 계정에서 주소 속성을 반환해야 알 것) 작동합니다.
는하지만 대시 보드는 액티브 클래스없는, 그래서 belongs_to
를 선언 할 수 없습니다. 계정에 올바른 레코드를 조회하도록 다른 방법이 필요합니다.
이 문제를 극복 할 수있는 방법이 있습니까? (나는 가짜 대시 보드 빈 테이블을 가질 수있어, 또는 내가 인수를 클래스 메소드에 대한 사용자의 인스턴스 메소드를 다시 작성할 수 있습니다. 그러나이 솔루션은 모든 해킹 있습니다).
감사합니다. 당신이 delegate :address, :to => :account
을 쓸 때
이것은별로 의미가 없습니다. 'id '란 무엇입니까? 그것이 숫자가되어야하나요? (당신은'("123")', 그건 유효한 방법 이름을 보낼 수 없습니다.) 당신은 attr_accessor'와'Dashboard.user_id'을 사용할 수 없습니다 user_id', 하나는 클래스이며, 다른 하나는 인스턴스입니다. .. 당신이 이것을 기대할 수있는 방법을 명확히하고 사례를 제시하십시오. –
안녕하세요 앤디, 내가 충분히 명확하지 오전 수있다. 이 클래스는 일반적인 ActiveRecord :: Base 클래스가 아닙니다. 따라서 current_user의 id를 보유 할 속성이 필요합니다. (나는이 이드를 영구히 유지하고 싶지 않다). 위임자는 Dashboard.address를 호출하고 Account.find_by_user_id (Dashboard.user_id) .address를 다시 가져올 수 있기를 바랍니다. 이 함수를 Account 클래스에 위임하려고 시도했지만 user_id 값을 Account에 전달해야 할 필요가있는 계정 인스턴스를 알 수 있습니다. – AdamNYC