【问题标题】:Same model being loaded twice though controller specifies 2 different models尽管控制器指定了 2 个不同的模型,但相同的模型被加载了两次
【发布时间】:2011-03-19 03:32:26
【问题描述】:

轨道 3...

我有一个控制器..

class OrdersController < ApplicationController
  def index
    @os_orders = OrlandoOrder.all
    @ct_orders = ChicagoOrder.all
  end
end

然后我定义了两个模型...

class ChicagoOrder < Order
  Order::ActiveRecord::Base.table_name_prefix = 'ct_schema.'
end

class OrlandoOrder < Order
  Order::ActiveRecord::Base.table_name_prefix = 'os_schema.'
end

然后是父模型...

class Order < ActiveRecord::Base

end

我想要做的是在这种情况下跨多个数据库模式建立相同的对象订单...

根据日志,sql是正确的...

ChicagoOrder 加载 (60.7ms) SELECT ct_schema.orders.* FROM ct_schema.orders

但是,它不是加载 OrlandoOrder 和 ChicagoOrder,而是加载指定的第一个模型 TWICE。所以在这种情况下,它加载 OrlandoOrder 两次并运行该 sql 语句两次并将其加载到 @ct_orders 而不是 ChicagoOrder.all 中。

我做错了什么?我是否在做一些 Rails 不打算与多个模式有关的事情?

请以一种或另一种方式提出建议,盯着这个看了几个小时,似乎无法用谷歌搜索正确的术语,看看是否有其他人分享了我的痛苦......

谢谢!!!!!!!!!

【问题讨论】:

    标签: ruby-on-rails activerecord model ruby-on-rails-3 schema


    【解决方案1】:

    嗨, 发生这种情况是因为您在 ChicagoOrder 和 OrlandoOrder 中继承了 Order 模型。 只需通过继承简单的活动记录模型类来编写 ChicagoOrder 和 OrlandoOrder。然后尝试一下。

    【讨论】:

    • 问题是 ChicagoOrder 和 OrlandoOrder 最终将拥有的 90% 的功能是相同的,所以我希望从一个共同的地方生成它们。我希望不必一遍又一遍地指定相同的关系。此外,实际的表名是“Orders”。如果我使用 OrlandoOrder 和 ChicagoOrder
    猜你喜欢
    • 2021-01-01
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    相关资源
    最近更新 更多