我正在使用Rails 4.我有一个用户模型。现在我想创建一个名为Following的新模型。表followings
将包含user_id
和followed_user_id
列,它们是引用users
表中记录的外键。
我有一个Active Record迁移来创建followings
表,比如
class CreateFollowings < ActiveRecord::Migration
def change
create_table :followings do |t|
t.references :user, index: true, foreign_key: true
end
end
end
这将创建列user_id
。如何使用t.references
语法创建followed_user_id
列?
这不是Rails 4特有的问题。因此,如果在Rails 5或Rails 3中可以实现这一点,请同时发表评论。
我不是在询问如何设置模型。此问题仅涉及迁移和在数据库中设置表。
答案 0 :(得分:0)
尝试更改您的迁移:
class CreateFollowings < ActiveRecord::Migration
create_table :followings do |t|
def up
t.references :user, index: true, foreign_key: true
t.references :followed_user, index: true, foreign_key: true
end
end
end
你的模型中也应该有相同的belongs_to关系。 因此,在模型中添加以下关联。
遵循模式:
class Following < ActiveRecord::Base
belongs_to :user, class_name => 'User'
belongs_to :followed_user, class_name => 'User'
end
用户模型:
class User < ActiveRecord::Base
has_many :users, :class_name => 'Following', :foreign_key => 'user_id'
has_many :followed_users, :class_name => 'Following', :foreign_key => 'followed_user_id'
end
下面创建外键的另一种方法:
def change
add_foreign_key :followings, :users, column: :followed_user_id
end
答案 1 :(得分:0)
如果不存在this.route.snapshot.parent.parent.data['project']
表,则无法使用t.references
语法创建followed_user_id
列。即使您可以使用该语法,仍然必须在模型中设置关联。
如果您创建2列并为其添加索引,则会出现什么问题:
followed_users