更新连接表HABTM

时间:2017-11-23 16:40:20

标签: ruby-on-rails activerecord

我有两种模式之间的关系:

众议院和人

class House
   has_and_belongs_to_many :persons
end

我有这样的联接表:

house_id | person_id | used
1          1           false

我需要使用以下代码更新用于“true”:

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

如何更新连接表中使用的列? 感谢。

2 个答案:

答案 0 :(得分:1)

我建议您在代码层中明确使用三个表之间的has_many和belongs_to关系:person,houses和join_table。

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,如果你想为你的连接表添加属性并与你的连接表交互(在评论中记入最大值来解释这个)

答案 1 :(得分:0)

除了使用PersonHouse之外,我建议使用相同的模型,而是创建一个具有属性Lease的名为Deedused的实际模型。这样可以使您的代码更整洁。