2017-07-03 9 views
2

ich derzeit eine Rails-Anwendung (Schienen v5.1.1 und Rubin v2.3.4) und ich bin immer einen Fehler bin entwickeln, wenn ein reform Form Objekt bei einem meiner Wege zu nutzen versuchen (/bookings/new):undefinierte Methode `beibehalten? ' mit Reform und Virtus Modell

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

ich verwende ein virtus model (die auf anderen Kontexten funktioniert gut):

class Booking 
    include Virtus.model 

    attribute :id, Integer 
    attribute :client_email, String 
end 

Das ist meine Form Objekt:

Dies ist die new Aktion auf mein Controller:

def new 
    @form = BookingForm.new(Booking.new) 
end 

Das ist meine Form Teil:

<%= form_for @form do |form| %> 
    <%= form.text_field :client_email %> 

    <div class="actions"> 
    <%= form.submit %> 
    </div> 
<% end %> 

ich anstelle eines aktiven Datensatz ein virtus Modell gedacht Mithilfe kein Problem sein sollte, da Reform verkauft sich als Form objects decoupled from your models. Habe ich etwas falsch gemacht?

+0

Sie könnten einfach "def persisted?" in Ihrer "Booking" -Klasse definieren und die Logik verwenden, die Sie dort haben möchten. Sie könnten einfach "false" zurückgeben, wenn die Klasse nur neue Objekte darstellt. – fanta

+0

Dies scheint nicht der richtige Ansatz zu sein, da ich auch eine 'to_key'-Methode in meinem Booking-Modell implementieren müsste (um die Elemente des Formulars zurückzugeben). Danach bekomme ich den Fehler: 'undefinierte Methode' input 'für # '(in der Zeile meiner Eingabe). –

+0

gibt es viele Dinge, die Sie verwenden können, zum Beispiel 'ActiveModel :: Conversion' (http://api.rubyonrails.org/classes/ActiveModel/Conversion.html) gibt Ihnen die' persisted? 'Methode plus einige andere. Sie können auch 'ActiveModel :: Naming' (http://api.rubyonrails.org/classes/ActiveModel/Naming.html) verwenden, falls Sie es benötigen. – fanta

Antwort

0

Es scheint wie der Kommentar von @fanta geholfen, aber ich die langfristige Antwort ist, dass Sie Virtus vermeiden sollten, besonders da Sie ein neues Projekt erstellen. Virtus wird nicht mehr von seinem eigenen Team, bewegt sie sich auf, um zu trocknen-rb (trocken-Typen und trocken-Validierungen)

Wenn Sie ein Modell verspotten benötigen - Sie können trocken-Struktur verwenden, OpenStruct, etc

Auch Reform hat jetzt volle Unterstützung für trockene Validierung und trockene Typen, und es wird der Weg der Zukunft sein (du wirst bis Version 4 unterstützt) Viel Glück :-)

+1

Danke für den Vorschlag! –

Verwandte Themen