복붙노트

[RUBY-ON-RAILS] 루비 온 레일즈. 어떻게이에서 액티브 레코드 .build 방법을 사용하십시오 관계에 속하는?

RUBY-ON-RAILS

루비 온 레일즈. 어떻게이에서 액티브 레코드 .build 방법을 사용하십시오 관계에 속하는?

나는 레일에서 .build 방법 (내가 현재 2.0.2을 사용하고 있습니다)에있는 모든 문서를 찾을 수 없었습니다.

실험을 통해 당신이 중 기록이 저장되어있는 전에 has_many 관계에 레코드를 추가하는 빌드 방법을 사용할 수 있습니다 보인다.

예를 들면 :

class Dog < ActiveRecord::Base
  has_many :tags
  belongs_to :person
end

class Person < ActiveRecord::Base
  has_many :dogs
end

# rails c
d = Dog.new
d.tags.build(:number => "123456")
d.save # => true

이것은 제대로 외래 키와 개와 태그를 모두 저장합니다. 이것은 belongs_to 관계에서 작동하지 않습니다.

d = Dog.new
d.person.build # => nil object on nil.build

나는 또한 시도

d = Dog.new
d.person = Person.new
d.save # => true

개에 외부 키 때문에 아직 저장되지 않았기 때문에이 저장되는 시간에, 새로운 사람이 ID를하지 않는다는 사실에이 경우에는 설정되어 있지 않습니다.

내 질문이 있습니다 :

감사합니다

해결법

  1. ==============================

    1.그것은 문서화되는 경우 :

    그것은 문서화되는 경우 :

    에 has_many 협회에서 API 문서에서 "모듈 액티브 :: 협회 :: ClassMethods"

    반대 방향으로 건물에 대한 대답은 약간 변경 구이다. 강아지와 예에서,

    Class Dog
       has_many :tags
       belongs_to :person
    end
    
    Class Person
      has_many :dogs
    end
    
    d = Dog.new
    d.build_person(:attributes => "go", :here => "like normal")
    

    또는

    t = Tag.new
    t.build_dog(:name => "Rover", :breed => "Maltese")
    

    당신은 또한 즉시 저장하도록 create_dog을 사용할 수 있습니다 (많은 해당 "만드는"방법처럼 컬렉션에 호출 할 수 있습니다)

    어떻게 스마트 충분히입니다 레일? 그것은의 마법 (또는 더 정확하게, 그냥 모른다는 찾아 싶어요!)

  2. ==============================

    2.

    @article = user.articles.build(:title => "MainTitle")
    @article.save
    
  3. from https://stackoverflow.com/questions/783584/ruby-on-rails-how-do-i-use-the-active-record-build-method-in-a-belongs-to-rel by cc-by-sa and MIT license