0

내가 다형성 협회에 문제가 있어요, 나는 내가 무엇을 달성하기 위해 노력하고있어이 연결을 사용하는 경우는이 시점에서 나도 몰라 : 나는 세 가지 모델이레일 협회

을 : PostProject , 및 Photo

레코드를 Post 레코드와 Project 레코드와 연결할 수 있기를 원합니다. PhotoProject과 연결되어 있고 그 다음 Post과 연결하려고하면 Poject에서 사라지지만 성공적으로 연결된 것은 Post입니다.

난 그냥이 일을해야 하는가 : 당신이 동시에 포스트 및 프로젝트와 연관 ​​사진을 원하는 경우

Post 
has_one :photo 

Project 
has_one :photo 

Photo 
belongs_to :post 
belongs_to :project 

답변

0
class Post 
    has_one :photo, as: :photoable 
end 

class Project 
    has_one :photo, as: :photoable 
end 

class Photo 
    belongs_to :photoable, polymorphic: true 
end 

http://guides.rubyonrails.org/association_basics.html, 당신을

+0

감사 Artin에게 있습니다. 이것이 내가 가진 것입니다. 문제는 내가 사진을 포스트와 프로젝트 모두와 연관 시키면 처음에 연결된 것과 상관없이 사진이 삭제된다는 것입니다. 따라서 사진이 프로젝트와 연결되어 있고 포스트와 연관 ​​시키려면 프로젝트에서 제거됩니다. – Tyler

+0

다형성은 사용하기에 잘못된 연관성이있는 것처럼 보입니다. 사진 기록에는 photoable_type : "Post"가있어서 게시물과 사진 모두에 연결할 수 없습니다. – Tyler

+0

지금 귀하의 문제를 확인합니다. 사진 = Photo.last (이 사진이 다형성 관계를 통해 프로젝트에 속한다고 가정하면 - photoable_type : "Project") 호기심에서 벗어났습니다. 그리고 당신은 포스트, post = post.last를로드했습니다. 만약 당신이 new_photo = post.new_photo (url : photo.url) (사진의 속성이 무엇인지 모르겠다. 그래서 나는 단지 URL을 구성하고있다). 데이터베이스에서 가져온 사진을 게시물에 재 할당하기 만하면됩니까? –

1

을 (다형성 협회에 섹션 2.9을 확인) 다음과 같이 관계를 선언하는 것이 옳습니다.

추가 개발이 제거 된 객체 (프로젝트 또는 게시물) 그래서 당신의 has_one :photo가되기 위해 NULL에 관련 기록 외래 키 값을 업데이트 :dependent => :nullify입니다 :

Post 
    has_one :photo, :dependent => :nullify 

Project 
    has_one :photo, :dependent => :nullify 

를 기억 당신의 사진 테이블 을 POST_ID 필요하고 project_id 속성은 프로젝트와 게시물을 모두 참조합니다.

게시물/프로젝트가 파괴되었을 때 사진을 파괴하려면 다음을 사용하십시오 : dependent => : 파괴하십시오. 아직 참조되지 않은 외래 키를 전혀 추가하지 않으면 전혀 좋지 않습니다. has_one 협회 체크 설명서에 대한 자세한 내용은

: http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_one

희망 당신이 설명하는 무엇

+0

많은 도움이됩니다! 감사합니다 – Tyler

+0

당신은 환영합니다 – medBo

2

에게 도움이 정기적 다형성 (동적 관련된 부모를 허용하지만, 단 하나의) 관계 없습니다. 1 - 많은 다형성 연관이 필요하거나 사진 모델에 project_idpost_id 두 개가 모두있는 것 같습니다.

나는 사진을 모델과 연결할 필요가 있다는 것을 분명히 알지 않는 한 후자의 옵션이 더 좋다고 생각합니다.

경우 여전히 many_polymorphic 접근 방식으로 가고 싶어 : 여기 좋은 예 Setting up a polymorphic has_many :through relationship

+0

고마워요! 나는 간단한 솔루션 (사진 모델의 ID)을 사용했다. – Tyler