遵循用户逻辑

时间:2010-07-29 17:35:15

标签: ruby-on-rails

我正在使用Ruby on rails 2.3.8,我想建立一个跟随用户的功能。

为此,我创建了两个表:用户以下,以及各自的模型:

class User < ActiveRecord::Base
  has_and_belongs_to_many :followings, :foreign_key => "follower_id"
end

class Following < ActiveRecord::Base
  has_and_belongs_to_many :users, :foreign_key => "follower_id", :class_name => "User"
end

现在,当我尝试执行current_user.followings.all(当然使用有效的current_user)时,它会抛出以下异常:

'followings_users' doesn't exist: SELECT 'followings'.* FROM `followings`  INNER JOIN 'followings_users' ON 'followings'.id = 'followings_users'.following_id WHERE ('followings_users'.follower_id = 1 )

我无法完成这项工作。我不知道为什么它要求我提供“followings_users”表。如果我想把它称为“跟随”怎么办?

我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

使用habtm时,Rails会尝试从连接表中获取关联。它尝试通过连接两个名称(followings_users)来猜测表的名称,或者您可以指定表的名称作为选项。但您必须在迁移中明确创建此表。

请参阅文档here

答案 1 :(得分:1)

您也可以使用较新的语法has_many :through执行此操作:

class User < ActiveRecord::Base
  has_many :user_followings
  has_many :followings, :through => :user_followings
end

class UserFollowing < ActiveRecord::Base
  belongs_to :users
  belongs_to :followings
end

class Following < ActiveRecord::Base
end

这需要一个名为:user_followings的联接表,其中列user_idfollowing_id

新语法通常比HABTM更受欢迎,因为它允许您在连接模型上定义方法,这可能很有用,尽管HABTM仍然可以正常工作。