【问题标题】:ActiveModel::MissingAttributeError: can't write unknown attributeActiveModel::MissingAttributeError: 无法写入未知属性
【发布时间】:2013-06-27 22:38:14
【问题描述】:

我在尝试通过 belongs_to 关联两条记录时遇到了问题:

class Enrollment < ActiveRecord::Base
  belongs_to :offering,
    foreign_key: [:term_id, :class_number]
end

@enrollment = Enrollment.new
@enrollment.offering = Offering.last

这会抛出:

ActiveModel::MissingAttributeError: can't write unknown attribute `[:term_id, :class_number]'

我做错了什么?

【问题讨论】:

  • 传递单个外键是否有效? (从 Rails 的角度来看,而不是从数据模型的角度来看。)
  • 是的,提供单个密钥有效,但不幸的是我需要两个密钥(我无法控制表格)。
  • 是的;我不认为 Rails 会自动使用多个外键,这是错误消息所暗示的。

标签: ruby-on-rails ruby rails-activerecord


【解决方案1】:

Rails 很遗憾不支持复合键。如果你需要这样的东西,你最好使用自定义 :has_many 就像@yannick 的评论引用一样。

另一方面,您可以使用由视图支持的模型,使用具有 Rails 友好 ID 的表(例如 my_offerings)和另一个表中的两个 PK 列(@987654322 @, class_number) 并将其与代码中的另一个表连接起来。

然后,有一个小进程来解析offerings 表,并构建任何缺失的my_offering 记录。

最后,视图会有一个 ID,视图中的连接(对 rails 是透明的)将处理复合键。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    相关资源
    最近更新 更多