我正在使用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”表。如果我想把它称为“跟随”怎么办?
我在这里做错了什么?
答案 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_id
和following_id
。
新语法通常比HABTM更受欢迎,因为它允许您在连接模型上定义方法,这可能很有用,尽管HABTM仍然可以正常工作。