2017-11-23 1 views
0

테이블 HABTM 가입 이 코드를 사용하는 "true":업데이트 내가 두 모델 사이의 관계를

h = house.persons.find(params[:person_id]) 
h.update_attribute(:used, true) # ERROR used column doesn't exists in persons table 

조인 테이블에 사용 된 열을 어떻게 업데이트 할 수 있습니까? 감사합니다. .

+0

그래도 HABTM을 사용해야합니다. http://guides.rubyonrails.org/association_basics.html#choosing-between-has-many-through-and-has- 과 속한 많은 것 – Kris

+1

조인 테이블에 추가 데이터를 저장하려는 경우 HABTM을 사용하지 마십시오. 'has_many though :'을 사용하십시오. HABTM은 극도로 제한되어 있으며 사용자가 간접적으로 조인 테이블을 작성/질의 할 수 있습니다. – max

답변

1

명사, 집 및 명시 적으로 코드 계층의 join_table과 같은 세 테이블 간의 has_many 및 belongs_to 관계를 사용하는 것이 좋습니다. 아래에 주어진

class House 
    has_many :persons, through: :person_houses 
    has_many :person_houses 
end 

class Person 
    has_many :houses, through: :person_houses 
    has_many :person_houses 
end 

#join table 
class PersonHouse 
    belongs_to :person 
    belongs_to :house 
end 

그런 다음 당신은 사용 속성을 업데이트 할 수 있습니다

person_house = house.person_houses.find_by(person_id: params[:person_id]) 
person_house.update(used: true) 

편집 당신이 당신의 가입 테이블에 속성을 추가 할 경우, HABTM를 사용하지 귀하의 참여와 상호 작용하는 안 테이블 (이것을 설명하는 의견의 최대 값을 신용하십시오)

+0

정확하게 코드를 작성하고 있지만 다음과 같은 오류가 발생했습니다. NoMethodError (정의되지 않은 메소드 'to_sym'for nil : NilClass 의미 : to_s) : – gui12344455

+0

조인 테이블 인스턴스를 업데이트 할 때이 오류가 발생합니까? 어떤 버전의 레일을 사용하고 있습니까? – xeon131

+0

네, 다음 행 : person_house.update (사용 : true) – gui12344455

관련 문제