我的2个模型出了问题。这是:
我的用户班可以有很多活动
has_many :events
我的活动可以有很多用户但属于一个(管理员)
belongs_to :user
has_one :album
has_many :guests, :class_name => User
现在,当我尝试访问用户创建的事件的访客时
event.guests.count #Like that
Rails返回一个SQL错误
SQLite3 :: SQLException:没有这样的列:users.event_id:SELECT COUNT(*)FROM“users”WHERE“users”。“event_id”=?
这对我来说很奇怪,因为用户可以拥有多个事件,因此不需要event_id列(我的观点)。我想我错了,因为如果我不是,我不会得到这个错误。 在belongs_to和has_many之间是否存在“冲突”?
有人可以向我解释为什么我会得到这个以及如何解决它?
非常感谢。
答案 0 :(得分:0)
我终于创建了另一个模型并使用了has_many:through方法。真的需要吗?因为为关系创建一个表似乎很重。
答案 1 :(得分:0)
我想你想使用has_and_belongs_to_many
has_many
是一对多的关系。它并不关心User
的关联是什么。它只是尝试在event_id列中查找具有该事件ID的所有用户,因此您的错误。
但是你要与多对多打交道。
Full Explanation on has_and_belongs_to_many here
Also read how to pick between has_and_belongs_to vs has_many :through 基本上,如果您不需要将连接模型用作独立实体,请使用has_and_belongs_to_many。两者都需要创建连接表。
答案 2 :(得分:0)
有人可以向我解释为什么我会这样......
方法调用的第一部分是event.guests
您的has_many
模型中设置Event
关联has_many :guests, :class_name => User
因此,活动记录会在users
表中查找名为event_id
的列(不存在),因此会出错。
......以及如何解决它?
将event_id
列添加到您的用户表中,belongs_to :event
模型中的User
是一个选项,但您最好使用has_many :through
方法刚刚发现。
答案 3 :(得分:0)
这样想:
1)用户has_many事件和事件belongs_to用户。因此事件表应该有一个字段user_id。这指定@user.events将获取用户的所有事件,@ event.user将获取该事件所属的用户。
2)事件has_many来宾,class_name:'用户'。在这里,@ events.guests将获取所有用户(因为你已经指定了不同的类名。如果你没有这样指定的话,它会寻找一个名为Guest的模型和一个名为'guests'的数据库中的表) 。由于guest(即用户)是事件的子模型,因此需要存储'event_id'以供参考。
即。子模型对象应始终具有父对象的引用(即parent_id)。