>我目前正在开发一个 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( 祝你好运:-(