나는 노래 모델과 아티스트 모델 사이에 has_many through association 셋업을 가지고있다. 내 코드 보인다 나는 사용자가 노래를 제출하고 입력 양식을 가지고이레일즈가 중복을 피하면서 has_many
SongArtistMap 모델
class SongArtistMap < ActiveRecord::Base
belongs_to :song
belongs_to :artist
end
아티스트 모델
class Artist < ActiveRecord::Base
has_many :song_artist_maps
has_many :songs, :through => :song_artist_maps
validates_presence_of :name
end
노래 모델
class Song < ActiveRecord::Base
has_many :song_artist_maps
has_many :artists, :through => :song_artist_maps
accepts_nested_attributes_for :artists
end
같은 노래 제목과 노래 아티스트에서.
그래서 사용자는 노래를 제출하고 사용자가 함께 노래를 제출하면 내 아티스트 테이블은 이미 내가 그 작가 및 설정
SongArtistMap
에서지도를 생성 할 노래의 아티스트가없는 경우 아티스트 테이블에 이미있는 아티스트 나는 SongArtistMap을 만들고 싶지만 아티스트는 복제하지 않기를 바란다.현재 사용자가 노래를 제출할 때마다 동일한 아티스트 테이블이 이미 존재하고 해당 복제 아티스트에 대해 SongArtistMap이 만들어 졌더라도 내 아티스트 테이블에 새 아티스트가 만들어집니다.
이 문제를 해결하는 방법에 대한 아이디어가 있으십니까? 난 레일 아마 이미 내장 된이 문제를 해결하기 위해 몇 가지 간단한 트릭을 느낀다. 감사합니다!
검색 방법을 알고 계십니까? 네가 만드는 방법 알아? 글쎄, 레일스 find_or_create_by_attribute 메소드가 있습니다! 따라서 귀하의 경우에는 find_or_create_by_name을 사용할 수 있습니다.그러나 중첩 된 특성을 사용하고 있기 때문에 ... [찾기 또는 만들기와 함께 중첩 된 특성 허용] (http://stackoverflow.com/questions/3579924/accepts-nested-attributes-for-with-find-or-create) . 그래, 이건 중복 된 질문이다. – Ashitaka