【问题标题】:Rails: underscore in table name confuses fixturesRails:表名中的下划线会混淆固定装置
【发布时间】:2019-08-29 19:40:22
【问题描述】:

我有一个带有 3 个模型的 rails 应用程序,OrderItemPhotoPhotoSize

来自 schema.rb,这是我的表 order_item(我在这里删除了不相关的列):

  create_table "order_items", force: :cascade do |t|
    t.integer "order_id"
    t.integer "photo_size_id"
    t.integer "photo_id"
    t.index ["order_id"], name: "index_order_items_on_order_id"
    t.index ["photo_id"], name: "index_order_items_on_photo_id"
    t.index ["photo_size_id"], name: "index_order_items_on_photo_size_id"
  end

生成的夹具文件如下所示:

one:
  order: one
  photo_size: one
  photo: one

two:
  order: two
  photo_size: two
  photo: two

现在运行我的测试我得到了错误

ActiveRecord::Fixture::FixtureError: 表“order_items”没有列 命名为“photo_size”。

现在在夹具中使用photo 并在表格中使用相应的photo_id 可以正常工作。 photo_size 及其对应的 photo_size_id 会引发错误。任何人都可以解释这种差异,如何解决这个问题?

我尝试了建议here 添加关于如何将 photo_size 复数的语句,但这并没有解决问题。不过,注释掉夹具文件会自然地停止错误。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-5


    【解决方案1】:

    您的OrderItem 模型中有belongs_to :photo_size 吗?

    【讨论】:

    • 不,我有一个 has_one :photo_size
    • 应该是belongs_to - 那是你的问题。 belongs_to 属于外键列所在的任何模型。
    • 是的,有时它没有意义(有时它没有意义的事实暗示你把 fkey 放在错误的表中:)
    【解决方案2】:

    关联的标签引用仅适用于belongs_to 关联,因为它依赖于外键,该外键位于声明belongs_to 关联的类上。

    From https://api.rubyonrails.org/v5.2.2/classes/ActiveRecord/FixtureSet.html

    在固定装置中指定外键可能非常脆弱,更不用说难以阅读了。由于 Active Record 可以从标签中找出任何夹具的 ID,因此您可以通过标签而不是 ID 来指定 FK。

    From API dock:

    #belongs_to 关联始终用于具有外键的模型中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-05
      • 2017-10-20
      • 1970-01-01
      • 2018-06-24
      • 2016-07-04
      • 2012-03-24
      • 1970-01-01
      相关资源
      最近更新 更多