[Rails] has_many - 没有这样的列user.event_id ...

时间:2014-02-22 11:51:20

标签: ruby-on-rails relationship

我的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之间是否存在“冲突”?

有人可以向我解释为什么我会得到这个以及如何解决它?

非常感谢。

4 个答案:

答案 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)。