【发布时间】:2019-01-22 08:28:29
【问题描述】:
我在 Rails 模型中设置 has_many 和 belongs_to 关联:Events(name, identifier, eid) and Users(name, uid),外键和主键混淆。我知道外键和主键的含义,但对在事件模型中使用哪个主键感到困惑:eid 或 uid。我在 Github 上看到了一些代码,他们也在用户模型上添加了外键。我的情况需要吗?
添加这些关联是否需要迁移?
给定:
- 每个用户可以有很多事件。
- 每个事件都属于一个用户。
- 事件标识符映射到用户 uuid(每个用户唯一)。
- 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 @ WHEREevents.user_id= '238329898' -
哪些类型有 'uid' 和 'identifier' 列?
-
我理解正确吗,
uid和eid是 uuid,而不是整数? -
是的,它们是 uuid。它们是字符串类型的。我在这里更改了名称以更好地理解
标签: ruby-on-rails ruby-on-rails-5 polymorphic-associations model-associations