나는 세 가지 모델, 계정, 사용자 및 연락처를 가지고 : 내 연락처 컨트롤러에서이 같은 사용자 레코드를 통해 새 연락처를 구축 범위를 시도하고has_many : 통해 구축
class User < ActiveRecord::Base
has_one :account
has_many :contacts, :through => :account
end
class Account < ActiveRecord::Base
belongs_to :owner, :class_name => 'User'
has_many :contacts
end
class Contact < ActiveRecord::Base
belongs_to :account
end
. 나는이 작업을 수행 할 때
def create
@contact = current_user.contacts.build(params[:contact])
respond_to do |format|
if @contact.save
...
else
...
end
end
end
, 나는 연락처 레코드는 그러나 ACCOUNT_ID 열이 접촉에 설정되지 않은 데이터베이스에 저장되며,이 컬렉션이 너무 호출에 추가되지 않습니다, 어떤 오류가 발생하지 않습니다 @ current_user.contacts는 빈 콜렉션을 리턴합니다.
제안 사항? build
를 사용
톰에게 감사드립니다. 그래서 build가 작동하는 방식을 잘못 이해 한 것 같습니다. user.contacts.build를 호출하면 메모리 (인스턴스)에 이미 인스턴스 (인스턴스)가 부여되었지만 이미 해당 사용자 (또는 계정)에 할당되어 있다고 가정합니다. 가능한 경우 양식에서 계정 및 사용자 ID를 채우고 싶지 않기 때문에 중첩 된 attirbutes를 사용하지 않는 것이 좋습니다. – SirRawlins
흠, 당신의 이해가 정확하다고 생각합니다. (423 번째 시간에이 문서를 읽었습니다 : http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html) 특히 "하나 이상을 반환합니다. 속성으로 인스턴스화되어 외래 키를 통해이 오브젝트에 링크되었지만 아직 저장되지 않은 콜렉션 유형의 새 오브젝트. " 이제 나는 더 조심스럽게 보였으므로, 나는이 문제를 보았다고 생각한다. 내 대답을 업데이트 할게. –
감사합니다. Tom - 매우 잘 작동하는 것 같습니다. 나는 전혀 불만을 제기 할 수 없습니다. 고맙습니다. – SirRawlins