我有两种模式之间的关系:
众议院和人
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
如何更新连接表中使用的列? 感谢。
答案 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
的名为Deed
或used
的实际模型。这样可以使您的代码更整洁。