【问题标题】:How can I extend ActiveRecord::Associations to a frozen_record in rails如何将 ActiveRecord::Associations 扩展到 rails 中的 freeze_record
【发布时间】:2016-04-11 22:54:41
【问题描述】:

我正在使用 Rails 中的 Frozen Record gem 上传一个 YAML 文件,其中包含我的应用程序的一些固定问题。上传后,我想使用 SaleQualifier 模型来抓取每个问题,将其与答案相关联,然后将其用作状态机以在问题树中移动。

我已经让 Frozen Record gem 正常工作,并且 YAML 文件上传正常。当我尝试将模型与新模型(SaleQualifier)关联时,我得到了'method_missing': undefined method 'belongs_to' for Question:Class (NoMethodError)

因此,我添加了 include ActiveRecord::Associations 组件,以便让我将新记录与我的 SaleQualifier Question belongs_to :sale_qualifier- 相关联,但这会引发:

'method_missing': undefined method 'dangerous_attribute_method?' for Question:Class (NoMethodError)

根据我的搜索,当我已经事先声明了方法时,就会抛出这个错误。我不知道这是在哪里定义的,但从 Frozen_Record gem 文件中我可以看到他们设置了一个 FrozenRecord ,内容如下:

module FrozenRecord
 class Base
  extend ActiveModel::Naming
  include ActiveModel::Conversion
  include ActiveModel::AttributeMethods
  include ActiveModel::Serializers::JSON
  include ActiveModel::Serializers::Xml
 end
end

我开始认为使用这个 gem 可能有点矫枉过正,也许我应该将我的问题加载到一个普通的 ActiveRecord::Base 模型中,但我喜欢 FrozenRecord 的想法,因为这正是我想要实现的。

我的代码:

class Question < FrozenRecord::Base
 include ActiveModel::Validations
 include ActiveRecord::Associations
 validates :next_question_id_yes, :question_text, :answer_type, presence: true
 belongs_to :sale_qualifier
 self.base_path = 'config/initializers/'
end

销售限定符:

class SaleQualifier < ActiveRecord::Base
 has_many :questions
end

谁能帮我解开我似乎陷入的烂摊子?也许我应该从 FrozenRecord 中挖掘出 YAML 上传函数并将它们转储到我的 Question 模型中,而不使用 gem。

【问题讨论】:

    标签: ruby-on-rails activerecord yaml


    【解决方案1】:

    所以最后,Frozen_Record 似乎并没有真正为我的应用添加太多内容。鉴于文件是从 YAML 加载的并且没有控制器,我认为没有办法更新问题记录,除非有人已经破坏了我的数据库并插入了他们自己的 questions.yml 文件。

    因此,我只是将问题模型更改为如下加载 YAML 并将其作为新问题记录插入数据库:

    class Question < ActiveRecord::Base
     validates :next_question_id_yes, :question_text, :answer_type, presence: true
     belongs_to :sale_qualifier
    
     File.open("#{Rails.root}/config/initializers/questions.yml", 'r') do |file|
       YAML::load(file).each do |record|
          Question.create(record)
       end
     end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-27
      • 1970-01-01
      • 2011-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多