【问题标题】:Undefined method `model_name` for reform object改革对象的未定义方法“model_name”
【发布时间】:2017-06-15 02:40:57
【问题描述】:

我不断得到:

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

【问题讨论】:

  • DonationForm 是模特吗?
  • @SebastiánPalma 抱歉,忘记输入特定代码。它实际上是一个改革表单对象(我认为是这个词)

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


【解决方案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

附:

这可能无关紧要——因为您使用的是 Rails 5.1。我还没有尝试从 4.2.8 升级

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

【讨论】:

  • @RubyCat,只是想知道我的回答是否准确?如果是的话,你能接受吗?
  • 我遇到了同样的错误,在Referm::Form 中指定模型并没有帮助。还有 Rails 5.1 所以也许这就是线索......
猜你喜欢
  • 2021-09-23
  • 1970-01-01
  • 1970-01-01
  • 2011-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多