2011-07-06 3 views
3

테이블에서 has_and_belongs_to_many 설정과 읽기가 있지만 레일스 콘솔에서 테이블에 쓸 수없는 것처럼 보입니다.콘솔에서 Rails 3 활성 레코드를 사용하여 many_to_many 테이블에 삽입하는 방법

Household.first.appliances [0] = 내가 콘솔에있는 동안 Appliance.first가 작동하고 저장하면 사실을 반환하지만 실제로 데이터베이스에 쓰지는 않습니다.

나는 원격 mysql 데이터베이스를 사용하고 있으며, many_to_many가 아닌 콘솔의 다른 모든 테이블에 쓸 수 있습니다. 어떤 아이디어로 그것을 할 수 있습니까?

+0

'save' 메소드를 사용해 보셨습니까? –

+0

어떻게 저장하려고 했습니까? – leenasn

답변

2
household = Household.first 
household.appliances << Appliance.first 
household.save 
당신이 --sandbox 옵션을 사용하지 않는

관한주의 사항 :

rails console 

을하지

rails console --sandbox 
+1

household.save는 중복되어 있으므로 [4.3.4] (http://guides.rubyonrails.org/association_basics.html#has-and-belongs-to-many-association-reference) 섹션을 참조하십시오. – Eric

4

그것은 has_and_belongs_to_many 때문에보다 :through 옵션을 has_many을 사용하는 아마 훨씬 더 낫다 더 유연하며이 다양성의 복잡성을 피할 수 있습니다.

두 주된 차이점은 has_many 버전에 id 기본 키 열이 있으므로 레코드를 주소 지정이 가능하며 일류 모델이므로 속성을 쉽게 업데이트 할 수 있습니다. has_and_belongs_to_many 방법으로 쉽게이 구조에 삽입

class Household < ActiveRecord::Base 
    has_many :household_appliances 
    has_many :appliances, :through => :household_appliances 
end 

class HouseholdAppliance < ActiveRecord::Base 
    belongs_to :household 
    belongs_to :appliance 
end 

class Appliance < ActiveRecord::Base 
    has_many :household_appliances 
    has_many :households, :through => :household_appliances 
end 

와 동일 : 여기

은 샘플 정의의 당신은 이런 관계를 저장할 필요가 없습니다

household = Household.first 
household.appliances << appliance 

household.appliances.count 
# => 1 

, 그 수행 자동으로 당신을 위해. 항상 log/development.log의 출력을 검사하여 INSERT 문이 만들어야 할 레코드를 나타내는 지 확인하십시오.

관련 문제