Неопределенный метод `to_hash’ при сохранении с помощью reform gem

#ruby-on-rails #forms #hash #gem #reform

#ruby-on-rails #формы #хэш #драгоценный камень #реформа

Вопрос:

У меня проблема. Я использую reform gem в своем приложении Rails с некоторыми сложными формами. К сожалению, я застрял при создании формы. Это мой код:

 class Order::Form < Reform::Form
  include Coercion
  include Composition
  include Reform::Form::ActiveRecord

  property :subscription, on: :order
  property :due_date, type: Date, on: :order
  property :start_fee, numericality: true, on: :order

  collection :products, populate_if_empty: Product, on: :order do
    property :type
    property :budget
  end

  property :campaign, on: :order do
    property :customer_id

    property :customer do
      property :id
      property :organization_number
    end
  end

  model :order

  def persist!(params)
    if validate(params)
      binding.pry
      # begin
        ::ActiveRecord::Base.transaction do
          save do |data, map|
            ...
          end
        end
      # rescue Exception
      #   false
      # end
    end
  end
end
  

И когда я пытаюсь сохранить, я получаю эту ошибку:

 NoMethodError - undefined method `to_hash' for #<#<Class:0x007f984ddef6d8>:0x007f984a65a4>
  

Интересно, правильно ли я настроил композицию с вложенными моделями.

Ответ №1:

У меня только что было такое же исключение, и это произошло потому, что я переопределял один параметр Constant ( ENV ) на значение a String . Поскольку изначально это был глобальный постоянный тип Hash , используемый мной gem запутался.

Попробуйте посмотреть, заменяете ли вы где-нибудь еще значение чего-то, что раньше было хэшем.