【问题标题】:rails: how to not include some db attributes in modelrails:如何不在模型中包含一些数据库属性
【发布时间】:2011-12-13 04:06:11
【问题描述】:

我的数据库表有一列可以包含大量数据。 我不希望这些数据成为相应 rails 对象(模型)的一部分。

如何在模型中告知我不想将此字段存储在内存中?

最初这是因为我有一个大于 4k 的会话,并且 rails 引发了 ActionController::Session::CookieStore::CookieOverflow 异常。

感谢您的帮助, 迈克尔。

【问题讨论】:

    标签: ruby-on-rails cookies


    【解决方案1】:

    您必须通过查找选项:select 明确指定列。 但是,不鼓励在会话中存储模型。在会话中仅存储对象 ID 并将模型对象本身保存在 Rails.cache 中怎么样?

    【讨论】:

    • 为了更清楚 - 存储在会话中对您的数据有效性很危险 - 当数据库中的数据更改时,会话中的模型不会更新,除非您手动执行,因此您最终会得到各种怪异
    • 如果您想进一步了解为什么从安全角度来看这是一个坏主意,请看这里:rorsecurity.info/the-book
    【解决方案2】:

    加载模型时,您可以显式设置要选择的列并跳过大列:

    MyModel.find(id, :select => 'column1, column2, column3')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多