Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 更新联接表HABTM_Ruby On Rails_Activerecord - Fatal编程技术网

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]