【问题标题】:Ruby on Rails 3 (3.1) ActiveModel Associations (tableless nested models)Ruby on Rails 3 (3.1) ActiveModel 关联(无表嵌套模型)
【发布时间】:2011-07-06 08:18:52
【问题描述】:

如何实现 ActiveModel 关联(无表嵌套模型)?

例如:

book has many chapters

使用 ActiveRecord,我将创建两个模型并将它们与 has_manybelongs_to 关联。但是 ActiveModel 没有这样的功能。我该如何实现?

【问题讨论】:

    标签: ruby-on-rails-3 activemodel


    【解决方案1】:

    对于 >= 2.3.x 的 rails 版本,您可以使用 activerecord-tableless gem。使用该 gem,您可以在没有数据库的情况下进行关联和验证。

    更新

    我已被添加为 gem 的作者,并且我已更新 gem 以支持更新的 Rails 版本。所以现在我们可以在 Rails 版本 >= 2.3

    中拥有关联的无表模型

    【讨论】:

    【解决方案2】:

    你根本不能那样做。它不是活动记录。

    您可以在以下位置查看 ActiveModel 文档(和源代码):

    https://github.com/rails/rails/tree/master/activemodel

    我猜你必须以老式的方式来做,使用一系列章节和章节中对书的引用。

    希望这会有所帮助!

    【讨论】:

    • 感谢您的回复,多米尼克。我是 Ruby 语言的新手,你能解释一下“章节中对这本书的引用”是什么意思吗?
    • 很高兴我能帮上忙!所以:你的“章节”类应该有一个“书”成员,你会影响到“章节”所在的实际“书”。在“书”类中,添加一个包含所有“章节”的数组本书包含。
    【解决方案3】:

    您可以查看this answer 了解另一种方法。

    class Tableless < ActiveRecord::Base
        def self.columns() @columns ||= []; end
    
        def self.column(name, sql_type = nil, default = nil, null = true)
            columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default, sql_type.to_s, null)
        end 
    
        attr_accessor :id, :name, :value
    
        has_many :stuff_things
        has_many :things, :through => :stuff_things
    
    end
    

    【讨论】:

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