我正在尝试使字段user_id和following_id具有用户ID字段的引用表。我已经尝试过所有东西,已经搜索过互联网但仍然不能。
迁移:
class CreateFollowers < ActiveRecord::Migration
def change
create_table :followers do |t|
t.references :user, index: true, foreign_key: true
t.references :following, index: true, foreign_key: true
t.timestamps null: false
end
end
end
型号:
class Follower < ActiveRecord::Base
belongs_to :user, :class_name => 'User'
belongs_to :following, :class_name => 'User'
end
class User < ActiveRecord::Base
has_many :follower1_as_user, :class_name => 'Follower', :foreign_key => 'user_id'
has_many :follower2_as_user, :class_name => 'Follower', :foreign_key => 'following_id'
end
我甚至阅读了文档,我总是看着代码,我认为我是对的。
答案 0 :(得分:1)
您的模型和表格设计存在问题。您有一个跟随另一个用户(2)的用户(1)。所以,1是追随者,2是追随者。
如果2也决定跟随1怎么办?
你将有一个这样的表:
关系
id / follower_id / followeed(或以下)_id
1 / 1_id / 2_id
2 / 2_id / 1_id
你需要通过可逆的关系来实现这一点。对于初学者来说是一个非常复杂的应用程序。幸运的是,有一个完美的书籍指南,可能需要你几天。看看Michael's Hartl guide
你需要的就是那里。
答案 1 :(得分:1)
reference
方法不支持表名与引用名称不匹配的表的外键。
解决方案可能是用更少的Rails魔法来构建相同的东西:
def change
create_table :followers do |t|
t.references :user, index: true, foreign_key: true
t.integer :following_id, index: true
t.timestamps null: false
end
add_foreign_key :followers, :users, column: :following_id
end
此外,Follower
模型中的关联声明也需要了解非显而易见的列名称:
class Follower < ActiveRecord::Base
belongs_to :user
belongs_to :following, class_name: 'User', foreign_key: 'following_id'
end