【发布时间】:2018-03-21 07:53:20
【问题描述】:
我有两个模型:User 和 Listing。
我正在尝试通过现有的 db 列在它们之间建立一对多的关系。
class User < ApplicationRecord
has_many :listings
class Listing < ApplicationRecord
belongs_to :user, foreign_key: "user_id"
这是我的迁移:
class AddFkToListing < ActiveRecord::Migration[5.1]
def change
add_foreign_key :listings, :users, column: :user_id, primary_key: :user_id
end
end
但它在表users 的列id 上创建了外键。
知道如何正确执行此操作吗?
这是数据库架构:
create_table "listings", force: :cascade do |t|
t.integer "listing_id"
t.string "state"
t.integer "user_id"
t.string "title"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["listing_id"], name: "index_listings_on_listing_id", unique: true
end
create_table "users", force: :cascade do |t|
t.string "name"
t.string "email"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "password_digest"
t.string "remember_digest"
t.boolean "admin", default: false
t.string "activation_digest"
t.boolean "activated", default: false
t.datetime "activated_at"
t.string "reset_digest"
t.datetime "reset_sent_at"
t.string "request_token"
t.string "request_secret"
t.string "oauth_verifier"
t.string "oauth_token"
t.string "login_name"
t.integer "user_id"
t.index ["email"], name: "index_users_on_email", unique: true
end
非常感谢!
【问题讨论】:
-
它应该在
listings表中添加了一个字段user_id,该字段引用了表users的id列——所以外键引用了用户的id列,听起来正确的?它可能更简单,但您的代码对我来说看起来是正确的(例如,不需要在 belongs_to 中指定外键)。 -
Listing类的关联中无需指定foreign_key: "user_id"。
-
非常感谢。 Listing.user_id 列是传统的,但 User.user_id 是非常规的。现在它与 User.id 相关联。我已经更新了原始帖子中的数据库架构。有什么想法吗?
标签: ruby-on-rails associations rails-activerecord