2017-07-03 29 views
2

我目前正在開發的Rails應用(導軌V5.1.1和紅寶石v2.3.4),我試圖讓我的路線之一使用reform表單對象時(/bookings/new錯誤):未定義的方法`堅持?'以改革了Virtus模型

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。我有什麼不對嗎?

+0

你可以在你的'Booking'類中定義'def persisted?',並在那裏使用任何你想要的邏輯,如果這個類只代表新的對象,你可以返回'false'。 – fanta

+0

這似乎不是正確的方法,因爲我還需要在我的預訂模型中實現'to_key'方法(返回表單的元素)。之後,我得到錯誤:''(在我的輸入行)'未定義的方法'輸入'。 –

+0

有很多事情可以使用,例如'ActiveModel :: Conversion'(http://api.rubyonrails.org/classes/ActiveModel/Conversion.html)給你'persisted?'方法加上其他一些東西。如果您需要,也可以使用「ActiveModel :: Naming」(http://api.rubyonrails.org/classes/ActiveModel/Naming.html)。 – fanta

回答

0

似乎@fanta的評論對我有所幫助,但我的長期回答是您應該避免使用Virtus,尤其是在您正在構建新項目時。了Virtus是由自己的團隊不再支持,他們轉移到幹-RB(幹型和幹驗證)

如果您需要模擬一個模型 - 您可以使用乾式結構,OpenStruct等

而且改革現在已經幹驗證和幹型的全力支持,這將是未來的方式(AM你將要支持的,直到第4版) 祝您好運:-)

+1

感謝您的建議! –

相關問題