2

我不断得到:

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
4

1 回答 1

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 升级

此外 - 我们的 Trailblazer 项目(包括改革)的 Gitter 频道是获得帮助的最佳场所:https ://gitter.im/trailblazer/chat

于 2017-06-15T16:56:53.587 回答