2011-12-20 2 views
0

을 새로 만들어야 하나에 두 개의 associatiated 모델을 만들 수 있습니다.레일 내가 그런 모델을 가지고 행동

@doc = Doc.new 

만 난 정말 함께 존재하는 문서 객체에 사진을 업로드 할 수 있습니다 업데이트 작업에,이 새로운 문서를 저장 한 후 :

DocController # 새로운 prebuilds의 문서와

@doc.photos << some_new_photo 

하지만 난 원하는 doC# new action의이 기능. 그렇다면 미리 작성된 사진 개체와 같은 사진을 업로드하고 @ doc.photos를 사용하여 사전 작성된 Doc에 추가하는 방법 [사진] 동시에 < <?

UPD :

주요 문제, 내가 할 때 문서 번호 새로운 것을 - 난 정말 내가 양식을 사용하는 동안 업로드 할 수 있습니다 얼마나 많은 사진 모른다. 관련 문서는/

답변

0

당신은 블록을

@doc = Doc.new do |doc| 
    doc.photos << some_new_photo 
end 

를 사용하거나 초기화 방법을

class Doc 
def initialize 
    @photos << some_new_photos 
end 
end 
을 다시 정의 할 수 있습니다 저장하지 않을 경우 사진 그래서 내가 동적으로 지은 배열, 즉, ​​DB에 저장해서는 안된다
+0

적뿐만 아니라'super'를 호출하지 않고 AR 클래스의'initialize' 방법을 다시 정의하지 마십시오. 이런 방식으로 AR이 자신의'initialize' 메소드를 통해 제공하는 기능을 잃어버린 것입니다. –

+0

오, 그래! 미안하지만 당신이 옳은 수퍼 메소드를 추가하는 것을 잊어 버렸습니다. 나는 그것이 단순한 클래스 객체라고 생각했다. 그러나 "belongs_to"와 "has_many"를 볼 때 나는 내 잘못을 이해했다. – freeze

0

또는 당신은 빌드를 사용할 수 있습니다

@doc = Doc.new 
params[:photos].each do |some_new_photo| 
    @doc.photos.build some_new_photo 
end 
if @doc.save! 
    ... etc 
1

당신은 다소 복잡한 레일 철을 사용할 수 있습니다 ature라는 이름의 accepts_nested_attributes을 사용하면 한 번에 원하는 수의 연결된 객체를 만들 수 있습니다.

은 기본적으로 당신의 생성 호출이 같은 것을 받아들이는 끝날 것 :

{ :doc => { :name => 'somname', :date => Time.now, :photos_attributes => [ 
    { :filename => 'funnybear.gif', :filesize => '120kb' }, 
    { :filename => 'happybear.gif', :filesize => '72kb' }, 
    { :filename => 'angrybear.gif', :filesize => '240kb' } 
    ]}} 
관련 문제