【问题标题】:How to add foreign key associations in Rails model?如何在 Rails 模型中添加外键关联?
【发布时间】:2019-01-22 08:28:29
【问题描述】:

我在 Rails 模型中设置 has_many 和 belongs_to 关联:Events(name, identifier, eid) and Users(name, uid),外键和主键混淆。我知道外键和主键的含义,但对在事件模型中使用哪个主键感到困惑:eid 或 uid。我在 Github 上看到了一些代码,他们也在用户模型上添加了外键。我的情况需要吗?

添加这些关联是否需要迁移?

给定:

  1. 每个用户可以有很多事件。
  2. 每个事件都属于一个用户。
  3. 事件标识符映射到用户 uuid(每个用户唯一)。
  4. eid 是每个事件的唯一 ID。
class User < ApplicationRecord
    has_many :events, inverse_of: :user
end

class Event < ApplicationRecord
    belongs_to :user, foreign_key: :identifier, inverse_of: :events
end

预期结果:

user = User.first  
user.events # Lists all events

event = Event.first  
event.user # Outputs first user

【问题讨论】:

  • 用户表的Primary_key 是uid - 使用它您可以明确识别任何用户。如果我理解正确,您需要将其值存储在事件表中,并将其存储在标识符列中。所以看起来你创建了正确的结构。你在控制台运行event.user的时候有没有报错?
  • @Vasilisa For User.first.events 它显示 ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'events.user_id' in 'where clause': SELECT events.* FROM @987654326 @ WHERE events.user_id = '238329898'
  • 哪些类型有 'uid' 和 'identifier' 列?
  • 我理解正确吗,uideid 是 uuid,而不是整数?
  • 是的,它们是 uuid。它们是字符串类型的。我在这里更改了名称以更好地理解

标签: ruby-on-rails ruby-on-rails-5 polymorphic-associations model-associations


【解决方案1】:

您应该使用 users 表中唯一标识用户的列。我读到你的帖子是uid,在这种情况下,你的代码应该是这样的:

class User < ApplicationRecord
  has_many :events, inverse_of: :event
end

class Events < ApplicationRecord
  belongs_to :user, foreign_key: :uid, inverse_of: :user
end

希望这会有所帮助。

【讨论】:

  • 那么我们在foreign_key和primary_key中添加其他模型的字段?我们不应该在用户模型中提到标识符作为外键吗?
猜你喜欢
  • 2023-03-25
  • 1970-01-01
  • 2013-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多