반응형
Rails 4에서 has_many : through : uniq 사용시 사용 중단 경고
Rails 4는 has_many : through와 함께 : uniq => true를 사용할 때 사용 중단 경고를 도입했습니다. 예를 들면 :
has_many :donors, :through => :donations, :uniq => true
다음 경고를 표시합니다.
DEPRECATION WARNING: The following options in your Goal.has_many :donors declaration are deprecated: :uniq. Please use a scope block instead. For example, the following:
has_many :spam_comments, conditions: { spam: true }, class_name: 'Comment'
should be rewritten as the following:
has_many :spam_comments, -> { where spam: true }, class_name: 'Comment'
위의 has_many 선언을 다시 작성하는 올바른 방법은 무엇입니까?
uniq
옵션은 범위의 블록으로 이동해야합니다. 스코프 블록은 다음의 두 번째 매개 변수 여야합니다 has_many
(즉, 줄 끝에 둘 수 없으며 :through => :donations
부품 앞으로 이동해야 함 ).
has_many :donors, -> { uniq }, :through => :donations
이상하게 보일 수 있지만 여러 매개 변수가있는 경우를 고려하면 조금 더 의미가 있습니다. 예를 들면 다음과 같습니다.
has_many :donors, :through => :donations, :uniq => true, :order => "name", :conditions => "age < 30"
된다 :
has_many :donors, -> { where("age < 30").order("name").uniq }, :through => :donations
Dylans 답변 외에도 모듈과의 연결을 확장하는 경우 다음과 같이 스코프 블록에 연결해야합니다 (별도로 지정하는 대신).
has_many :donors,
-> { extending(DonorExtensions).order(:name).uniq },
through: :donations
나뿐 일 수도 있지만 범위 블록을 사용하여 연결 프록시를 확장하는 것은 매우 직관적이지 않은 것 같습니다.
반응형
'programing' 카테고리의 다른 글
UILabel이 잘 렸는지 확인하는 방법은 무엇입니까? (0) | 2020.08.26 |
---|---|
확인 대화 상자로 ActionLink 삭제 (0) | 2020.08.26 |
Docker가 설치되어 있지만 Docker Compose는 설치되어 있지 않습니까? (0) | 2020.08.26 |
이미 대상 브랜치에있는 커밋을 보여주는 GitHub 풀 요청 (0) | 2020.08.25 |
boost :: flat_map 및 map 및 unordered_map과 비교 한 성능 (0) | 2020.08.25 |