2012-11-03 1 views
1

지난 몇 시간 동안 내가 어려움을 겪고 있습니다.Rails Puzzle : 중첩 된 값이 있는지 확인하십시오. 저장하지 않고 자식 값을 저장합니다.

중첩 된 속성이있는 양식이 있습니다. 각 게시물은 많은 위치를 소유하고 있습니다. 고유 한 각 위치가 필요하지만 여러 위치에 동일한 위치를 추가 할 수 있어야합니다. 이상적으로이 유효성 검사는 모델 내에서 수행됩니다.

  • 그래서, 내 게시물에 그들은 다음 위치의 포 스퀘어 API를 검색, 어떤 일이 발생하는 것은 사용자 '는 위치를 추가합니다'입니다 형성한다.
  • 제출시 위도와 경도가 이고 위치가 테이블에 저장되면 여기에 을 연결하는 Locations_Posts 테이블이 있습니다.
  • 게시물 모델은 위치가있는 경우 을 확인해야합니다. 위치가있는 경우 위치에 아무 것도 추가하지 않으면 은 관련 데이터를 Locations_Posts 테이블에 추가하기 만하면됩니다.

    *Posts.rb* 
    
    # ================= 
    # = Location validations = 
    # = If location exists then just add to locations_posts, else create new location = 
    
    def locations_attributes 
    location && location.name 
    end 
    
    def locations_attributes=(value) 
    self.location = Location.find_by_name(value) 
    self.location ||= Location.new(:name => value) 
    end 
    

    (rails: create Parent, if doesn't exist, whilte creating child record에서 도난)

    그러나, 나는 다음과 같은 오류 받고 있어요 :

    Unknown key: 0 
    

은 몇 가지 조사 후 나는 이런 식으로 뭔가를해야 할 것을 일한

나는이 스 니펫과 가까이 있어야하지만 마지막 장애물을 극복하기 위해 도움이 필요하다고 생각합니다! 사전에

감사합니다,

제임스

답변

1

는 사용해보십시오 : 레일 4

def locations_attributes=(value) 
    self.location = Location.find_or_create_by_name(value) 
end 
+0

안녕하세요! 이것은 정상적으로 진행되는 것으로 보이고 요소가 만들어 지지만 미리 존재할 때 이름 값을 찾지 못하는 것 같습니다. 단순히 값을 저장하는 것입니다. 어떤 아이디어? –

0

이 완벽했다. 모두에게 감사드립니다.

def locations_attributes=(value) 
    self.location = Location.find_or_create_by(value) 
end 

이렇게하면 위치에 전달 된 모든 속성에서 고유성을 검사합니다.

관련 문제