未定义的方法“持续存在?”改革与美德模式

undefined method `persisted?' with Reform and Virtus model

我目前正在开发 Rails 应用程序(rails v5.1.1 和 ruby v2.3.4),但在尝试使用 reform 在我的其中一条路线上形成对象 (/bookings/new):

undefined method `persisted?' for #<Booking:0x007fbae9a98138>

我正在使用 virtus model(在其他情况下工作正常):

class Booking
  include Virtus.model

  attribute :id, Integer
  attribute :client_email, String
end

这是我的表单对象:

class BookingForm < Reform::Form
  property :client_email
end

这是我控制器上的 new 操作:

def new
  @form = BookingForm.new(Booking.new)
end

这是我的部分表格:

<%= form_for @form do |form| %>
  <%= form.text_field :client_email %>

  <div class="actions">
    <%= form.submit %>
  </div>
<% end %>

我认为使用 virtus 模型而不是 active record 应该没有问题,因为改革以 Form objects decoupled from your models 来推销自己。我有没有看错?

@fanta 的评论似乎有所帮助,但我的长期答案是您应该避免使用 Virtus,尤其是因为您正在构建一个新项目。 Virtus 不再由自己的团队支持,他们转向 dry-rb(dry-types 和 dry-validations)

如果您需要模拟模型 - 您可以使用 dry-struct、OpenStruct 等

此外,Reform 现在完全支持 dry-validation 和 dry-types,这将是未来的方式(thou AM 将支持到版本 4) 祝你好运:-)