문제

Hasmany / Solgsto Association이있는 두 개의 ActiveRecord 모델이 있습니다.

class User < ActiveRecord::Base
  has_many :letters
end

class Letter < ActiveRecord::Base
  belongs_to :user
end

사용자 모델에는 개정 _number 속성이 있는데,이 속성은 속성 _to 연관성을 범위로 범위를 범하고 있으므로 문자는 user.id와 user.revision_number 모두에 의해 사용자와 연결됩니다.

API 문서에 문서화 된 다음을 사용해 보았습니다.

class Letter < ActiveRecord::Base
  belongs_to :user, :conditions => "revision_number = #{client_revision}"
end

그러나 이것은 편지의 사례가 아니라 편지 클래스에서 클라이언트-리베이션을 호출하려고 시도합니다. 누구든지 SOLDS_TO 협회를 올바르게 범위를 범하는 올바른 방향으로 나를 지적 할 수 있습니까?

나는 사용하고있다 방문 가능한 행동 버전으로 플러그인 사용자 모델.

도움이 되었습니까?

해결책 2

마지막으로 내가 필요로하는 것은 Composite Keys와 같은 것을 알아 냈습니다. Rails Activerecord는 지원하지 않습니다. 솔루션은 (최소한) 복합 키를 지원하기 위해 문자에 맞춤형 클라이언트 액세서를 작성하는 것이 었습니다 (ID 및 Revision_Number).

class Letter < ActiveRecord::Base
  def client
    Client.find_by_id(self.client_id).try(:find_revision, self.client_revision)
  end

  def client=(c)
    self.client_id = c.id
    self.client_revision = c.revision_number
  end
end

class Client < ActiveRecord::Base
  acts_as_revisable

  has_many :letters
end

이 설정을 사용하면 클라이언트#1. 레터는 두 글자의 배열을 검색하지만 문자#2. 클라이언트는 클라이언트#1R2를 검색하고 문자#2. 클라이언트를 검색합니다. 클라이언트#1R4 :

Client         id:    1    1    1    1    1    1
       rev_number:    1    2    3    4    5    6

Letter         id:         1              2
        client_id:         1              1
  client_revision:         2              5

이것이이 문제에 대한 최선의 접근법인지 확실하지 않지만 지금은 효과가있는 것 같습니다.

다른 팁

나는 당신이 왜 범위를 원할 지 이해하는 데 어려움을 겪고 있습니다. belongs_to 이런 식으로. 내가 틀렸다면 나를 바로 잡으십시오. 그러나 이런 일을하는 것이 더 낫습니다. 나는 당신이 일종의 버전 제어 시스템을 원한다고 가정합니다.

class User < ActiveRecord::Base
  has_many :letters
end

class Letter < ActiveRecord::Base
  has_many :revisions, :class_name => "LetterVersion"
  belongs_to :current, :class_name => "LetterVersion"
end

class LetterVersion < ActiveRecord::Base
  belongs_to :letter
end
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top