未定义的方法"持久化"与改革和 Virtus 模型



>我目前正在开发一个 Rails 应用程序(rails v5.1.1 和 ruby v2.3.4(,当我尝试在我的一条路线上使用改革表单对象时出现错误(/bookings/new(:

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

我正在使用一个虚拟模型(在其他上下文中工作正常(:

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-struct,OpenStruct等

此外,改革现在完全支持干验证和干类型,它将成为未来的方式(你AM将支持到版本4( 祝你好运:-(

最新更新