改造对象的未定义方法`model_name`

时间:2017-06-15 02:40:57

标签: ruby-on-rails-5 reform trailblazer

我继续说:

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 个答案:

答案 0 :(得分:1)

您的合同需要知道它所连接的模型。

  1. 从技术上讲它可以是任何东西--ActiveRecord模型,PORO,OpenStruct等。但是改革合同需要知道它应该在哪里&#34;指导&#34;输出,一旦完成验证,强制等等。
  2. 如果你没有指定模型,改革将尝试从传递给表单的对象猜测它是什么。
  3. 要让ActiveRecord魔术起作用,你必须在改革中指定模型。我认为这仅适用于ActiveRecord。如果我没记错@apotonick在一些讨论中提到过。
  4. 所以你缺少的只是一行

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

    P.S:

    这可能是不相关的 - 因为你使用Rails 5.1。我还没有尝试升级4.2.8

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