0

Rails 3 has-and-belong-to-many 연관 (HABTM)에서 다형성 관계를 근사하려고합니다. 예상대로Rails 3 HABTM - 액세스 교차 엔티티

has_and_belongs_to_many :favorite_users, :class_name => "User", :join_table => "user_favorites", :association_foreign_key => "favorite_id", :foreign_key => "user_id", :conditions => "user_favorites.favorite_class='User'" 

데이터를 검색,이 작품 : favorite_class

사용자 클래스에서, 내가 정의 된 관계를 가지고 USER_ID, favorite_id :

교차 테이블 (user_favorites는) 다음 필드가 있습니다. 불행하게도,이 정의는 내가 필요로하는 favorite_class '값 (이 상황에서는'사용자 ')을 추가하지 않습니다.

Arel을 사용하여 레코드를 저장하기 전에 favorite_class 필드를 원하는 값으로 설정하는 방법이 있습니까?

답변

0

내가 사용하여 문제를 해결할 수 있었다 : insert_sql 옵션 (단일 인용 참고 용) :

:insert_sql => 'INSERT INTO user_favorites (user_id, favorite_id, favorite_type) VALUES (#{id}, #{record.id}, "User")' 
+0

downvoting하지 않지만 반대하는 것이 좋습니다. Rails는 규칙을 따르는 것에 달려 있습니다. 이런 식으로 SQL 인서트를 수행하는 것은 프로덕션 코드에 권장되지 않는 PHP 방식입니다. –

2

has_many 연관성이 더 잘 작동 할 수 있습니다. 도움이 될만한 기사가 있습니다. 다형성 has_many : through 관계를 사용하여 문제를 설명하고 해결 방법을 제공합니다.

http://blog.hasmanythrough.com/2006/4/3/polymorphic-through

이 도움도 될 수 있습니다

Polymorphic habtm relationships with Rails/ActiveRecord

+0

감사 쿼리를 매개 변수화. – craig

+0

+1 habtm은 조인 연결을위한 추가 필드를 허용하지 않습니다. 연관성을 habtm에서 hmt로 변경하고이를 사용하는 코드가 처음으로 추가 필드가 필요할 때 고통 스럽기 때문에 자주 deprecated로 처리됩니다. has_many : through는 주요 mod없이 이것을 허용합니다. –

0

변형에 SQL 삽입이 있습니다. 더 나은 다음 당신의 UserFavourites 모델에서 사용 :

before_save :set_favourite_type 

private 

def set_favorite_type 
    self[:favorite_type] = self.favoritable.class.to_s 
end 

또는 적어도 사용 # 대신 응답 {}