나는 우리가 users
및 themes
이 레일 4.1.7 응용 프로그램이 있습니다Rails4 재정의 has_many 게터 방법
class User < ActiveRecord::Base
has_many :themes
end
class Theme < ActiveRecord::Base
belongs_to :user
end
이제 사용자가 다음 몇 가지 자신의 테마를 (만들 수 있습니다이 테마에 대한 그들의 user_id
세트가됩니다 사용자의 id
가) 또는 사전 정의 된 테마 중 하나를 사용할 수 있습니다 (user_id
세트 내가하고 싶은 무엇
) null
이다 한 다음 내가 @user.themes
를 호출 할 때이 나를 가지고 있도록 어떻게 든 has_many
연결을 변경하기 일 e는 사용자의 테마와 함께 테마를 미리 정의합니다.
내가 시도하는 것 :
1) 대신 has_many
협회의 인스턴스 메서드 정의 : 나는 사용자와 테마를 열망 -로드 싶습니다 이후
class User < ActiveRecord::Base
def themes
Theme.where user_id: [id, nil]
end
end
을하지만 (들) (includes(:themes)
), 실제로는 그렇지 않습니다.
2) 일부 범위 (has_many :themes, -> { where user_id: nil }
)를 사용하지만과 같은 mySql 쿼리는 비어있는 값을 반환합니다. 나는 Rails5에서 has_many :themes, -> { or.where user_id: nil }
같은 것으로 할 수 있다고 생각하지만 레일스 버전을 변경하는 것은 지금은 옵션이 아닙니다.
사실 사용자가 지정하지 않은 상태의 'Theme'이 각 사용자 (많은 사용자)에게 속해 있기 때문에 연관을 다시 작성하는 것은 좋지 않은 아이디어라고 생각합니다. 'has_one - has_many' 관계가 아닙니다. 목표 달성을 위해 다른 방법을 사용하는 것이 좋습니다. – Ilya
그래, 그게 내가 지금 사용하고있는거야. 오직, 열심히로드하는 것이 훨씬 더 좋을 것입니다 ... – Misu