2014-07-25 5 views
0

나는 (단체 포함) 다음과 같은 모델 한 : 나는 내 응용 프로그램에 정의 된 크기의 세트가레일에 주어진 중첩 된 속성으로 관계를 만들기

Page has_and_belongs_to_many Dimension 

을 :

{id:1, width: 20, height:30} 
{id:2, width: 40, height:60} 
{id:3, width: 100, height:150} 

는 사용자가 생성 할 때 페이지에서 다음과 같은 차원의 배열을 설정할 수있게하려고합니다.

Page.create({:page_name => 'test', :dimensions_attributes => [{:width => 20, :height => 30}, {:width => 40, height: 60}]) 

이 방법의 문제점은 다음과 같습니다. 그것은 내 DB 내 차원의 새로운 기록을 만들 것이라고, 나는 그것을 원하지 않는다. create 메소드가 실행되고 제공된 너비와 높이가 주어진 차원을 찾으려고합니다.

어떻게하면됩니까?

답변

2

나는 당신이이처럼 그 모델, 뭔가 방법을 추가해야한다고 생각 :

def add_dimensions=(dimensions_attributes) 
    dims.each { |attrs| dimensions << Dimension.find_or_create_by!(attrs) } 
end 

그런 다음 Page.create에 호출 :add_dimensions에 대한 :dimensions_attributes를 교체해야합니다.

+0

흥미 롭군요,하지만 그 시점을 언제 내가 그 방법이라고 부릅니까? 'Page.create ({: page_name =>'test ', : dimensions_attributes => [{: width => 20, : height => 30}, {: width => 40, height : 60}]) ''자동으로 치수를 생성합니다. 그런 일이 일어나지 않게하려면 어떻게해야합니까? –

+0

편집 된 답변보기 – rabusmar

+0

오, 좋은. 내가 참조. 고맙습니다! 말이된다. 나는 그것을 시도 할 것이다 –