【发布时间】:2017-07-03 16:38:28
【问题描述】:
我目前正在开发一个 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 出售自己。我是不是搞错了什么?
【问题讨论】:
-
你可以在你的
Booking类中定义def persisted?,并使用你想要的任何逻辑,如果类只代表新对象,你可以返回false。 -
这似乎不是正确的方法,因为我还需要在我的 Booking 模型中实现
to_key方法(以返回表单的元素)。之后我得到错误:undefined methodinput' for #<:helpers::formbuilder:0x007fbae9e10450>` (在我的输入行)。 -
您可以使用很多东西,例如
ActiveModel::Conversion(api.rubyonrails.org/classes/ActiveModel/Conversion.html) 为您提供persisted?方法以及其他一些方法。如果需要,您也可以使用ActiveModel::Naming(api.rubyonrails.org/classes/ActiveModel/Naming.html)。 -
糟糕,我实际上犯了一个错误,使用
form.input方法而不是form.text_field。我的错。但是ActiveModel::Conversion包含实际上解决了我的问题!谢谢
标签: ruby-on-rails ruby reform trailblazer virtus