Ruby on rails 更新联接表HABTM
我有两个模型之间的关系: 房客Ruby on rails 更新联接表HABTM,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有两个模型之间的关系: 房客 class House has_and_belongs_to_many :persons end 我有一个这样的联接表: house_id | person_id | used 1 1 false 我需要使用以下代码将used更新为“true”: h = house.persons.find(params[:person_id]) h.update_attribute(:used, true) # ERROR use
class House
has_and_belongs_to_many :persons
end
我有一个这样的联接表:
house_id | person_id | used
1 1 false
我需要使用以下代码将used更新为“true”:
h = house.persons.find(params[:person_id])
h.update_attribute(:used, true) # ERROR used column doesn't exists in persons table
如何更新联接表中使用的列?
谢谢。我建议您在代码层中明确使用三个表之间的has\u many and behold\u to关系:persons、house和join\u表
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)
编辑
如果您想向联接表添加属性并与联接表交互(在解释这一点的注释中,请记为max),则绝对不要使用HABTM。我建议您使用相同的方法,除了使用属性
而不是PersonHouse
,创建一个名为Lease
或Dect
的实际模型。这将使您的代码更加干净。但是您需要使用HABTM:如果您想在联接表中存储额外数据,请不要使用HABTM。但是,Use有很多功能:
。HABTM的限制非常有限,只允许您间接创建/查询联接表。我完全按照您的代码进行操作,但出现了以下错误:NoMethodError(未定义的方法'to_sym'表示nil:NilClass,您的意思是什么?to_s):您在更新联接表实例时出现了此错误?您使用的是什么版本的rails?rails版本5.1.4my join table没有ID列,可能是这个吗?您可以发布person\u house确切包含的内容吗?还有house.person\u houses返回的内容和params[:person\u id]