ruby-on-rails - Acitverecord 用 `through` 指定 `inverse_of` 但不是相反
问题描述
我有3个模型如下:
class User
has_many :event_series, inverse_of: :user
has_many :events, through: :event_series, inverse_of: :user
end
class EventSeries
belongs_to :user, inverse_of: :event_series
has_many :events, inverse_of: :event_series
end
class Event
belongs_to :event_series, inverse_of: :events
has_one :user, through: :event_series, inverse_of: :events
end
这一切都很好。现在我想为每个用户添加一个名为“showcase_event”的特殊事件。
class User
has_one :showcase_event, class_name: 'Event', inverse_of: :user
end
这不起作用,因为Event
模型没有直接拥有用户,它通过EventSeries
.
我在序列化过程中遇到错误:
ActiveRecord::StatementInvalid (PG::UndefinedColumn: ERROR: column events.user_id does not exist
我正在使用快速 jsonapi:
class PublicUserSerializer
include FastJsonapi::ObjectSerializer
...
has_one :showcase_event, record_type: :event, serializer: EventSerializer
...
end
在我看来,我之间的反向关系User
需要在Event
和EventSeries
之间起作用User
,showcase_event
但我不知道如何指定只有反向是通过EventSeries
事先道歉,因为没有最好的词汇来描述这个问题。
解决方案
由我的橡皮鸭解决。如文档中所示:
#belongs_to
关联总是在具有外键的模型中使用。
所以我将我的声明更改showcase_event
为:
class User
belongs_to :showcase_event, class_name: 'Event', inverse_of: :user, optional: true
end
并且问题解决了
推荐阅读
- php - PHP-FPM docker 容器根据引擎(docker-compose 和 swarm)有不同的行为
- php - 如何使用codeigniter和vue js上传多个文件
- spring-boot - 实时连接两个服务器端点
- php - PHP 单元终端 UI 未对齐/填充空白
- html - 默认情况下如何将滚动设置为下拉列表的顶部
- ios - 崩溃:IOS 12 和 13 中的 AVAudioSession 通知线程 EXC_BREAKPOINT
- c# - 过滤子列表记录以及父列表字段
- ms-access-2016 - 如何将 Excel 公式转换为 MS-Access 表达式
- mysql - SQL中的数字列到日期时间
- c# - 有没有办法获取在 SYSTEM 用户下运行的进程的可执行文件的文件路径?