我目前正在开发一个rails应用程序(rails v5.1.1和ruby v2.3.4),当我试图在我的一个路由(/bookings/new)上使用reform表单对象时出错:

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模型而不是活动记录应该是没有问题的,因为改革本身就是Form objects decoupled from your models我做错什么了吗?

最佳答案

似乎@fanta的评论起到了帮助作用,但我的长期答案是,你应该避免使用Virtus,特别是因为你正在构建一个新项目Virtus不再由自己的团队支持,他们转向dry rb(dry type和dry validation)
如果需要模拟模型,可以使用dry struct、openstruct等
同时,现在的改革已经完全支持干式验证和干式类型,这将是未来的发展方向(你将一直支持到第4版)
祝你好运:-)

关于ruby-on-rails - 未定义的方法“是否持续?”改革和维特图斯模型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44890453/

10-16 00:17