【问题标题】:rails model attributes without corresponding column in dbrails模型属性在db中没有对应的列
【发布时间】:2008-12-30 03:46:19
【问题描述】:

我有一些不需要任何持久性的 rails 模型,但是我希望 rails 认为该模型实际上具有属性 x、y、z,因此当在控制器中调用诸如 to_json 之类的方法时,我会免费将它们包含在内。

例如,

class ModelWithoutTableColumns << ActiveRecord::Base

def x
   return "Custom stuff here"
end

表“ModelWithoutTable”的数据库中没有 x 列(对不起,名称有点混乱!)

有人知道如何解决这个问题吗?

【问题讨论】:

标签: ruby-on-rails ruby activerecord models


【解决方案1】:

听起来你想要 ActiveModel。查看 http://yehudakatz.com/2010/01/10/activemodel-make-any-ruby-object-feel-like-activerecord/ 了解 Yehuda Katz 的精彩演练。特别是针对您的to_json 要求的“序列化”部分。

【讨论】:

    【解决方案2】:

    只是不要从 ActiveRecord::Base 继承

    编辑:您是否尝试过将选项传递给 to_json,例如 :methods?见here

    【讨论】:

    • 不能混搭吗?
    • 好吧,您显然可以在任何模型中定义您想要的任何自定义方法/属性——毕竟它们只是 Ruby 类。我从您的型号名称推断出您不希望它受到数据库支持:)
    • 所以你有一些表属性是自动暴露的,还有一些纯粹由方法定义的?
    • 事情是我已经尝试过了,并且像 to_json 这样的 Rails 内置函数无法将这些方法 (attr_accessor :x) 识别为模型“表”属性的一部分。感觉很不直观,我想我错过了一些明显的东西。
    • Rails 似乎在区分表属性和 Ruby 属性。我想知道是否有一种 Rails 方法可以将 Ruby 属性定义为“正确”的属性?!
    【解决方案3】:

    这行不通--ActiveRecord::Base 定义了 to_json,但需要一个表。

    您应该查看 ActiveRecord::BaseWithoutTable 插件。 Here's how to use it,这是updated version for Rails 2

    我没有尝试过,所以不能保证。

    【讨论】:

      【解决方案4】:

      您可能还想查看acts_without_database,有关它的当前详细信息是here,但该站点目前已关闭。 Here's the posting on RubyFlow,从今天开始。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-11
        • 2012-08-17
        相关资源
        最近更新 更多