Неопределенный метод `имя_модели` для объекта реформы

Я продолжаю получать:

Undefined method `model_name` for #<DonationForm:0x007ff62ca75470>

Я почти уверен, что что-то упустил. Я следовал инструкции по установке и все. Что может быть причиной?

Модель:

class Donation < ApplicationRecord
  belongs_to :campaign

  has_many :anotherthings
end

контроллер:

def new
  @campaign = Campaign.new
  @donation = DonationForm.new(Donation.new)
end

Посмотреть:

<%= simple_form_for [@campaign, @donation] do |f| %>
<% end %>

Форма объекта:

# app/forms/donation_form.rb
class DonationForm < Reform::Form
  property :donation_amount
end

1 ответ

Ваш контракт должен знать, с какой моделью он связан.

  1. Технически это может быть что угодно - модель ActiveRecord, PORO, OpenStruct и т. Д. Но контракт реформирования должен знать, куда он должен "направлять" вывод, как только это будет сделано с валидациями, принуждением и т. Д.
  2. Если вы не укажете модель, Reform попытается угадать, что это за объект, переданный в форму.
  3. Чтобы магия ActiveRecord работала - вы должны указать модель в реформе. Я думаю, что это применимо только к ActiveRecord. Если я правильно помню, @apotonick упоминается в некоторых обсуждениях.

То, что вам не хватает, это всего лишь одна строка

# app/forms/donation_form.rb
class DonationForm < Reform::Form
  model Donation  # Try adding this line. 
  property :donation_amount
end

PS:

Это может быть что-то не связанное - так как вы используете Rails 5.1. Я еще не пробовал обновляться с 4.2.8

Кроме того, наш канал Gitter для проекта Trailblazer (включая реформу) является лучшим местом для получения помощи: https://gitter.im/trailblazer/chat

Другие вопросы по тегам