Ich habe den folgenden Code in meiner Form.
%Vor%Wenn eines der Felder leer ist, erhält :
%Vor%Die Parameter, die übergeben werden, sind:
%Vor%Wer weiß, warum das passiert?
Es scheint einen "schmutzigen" Fix für diesen Link zu geben, aber vielleicht gibt es eine bessere Lösung in Rails 3?
Christ. Dies ist ein Fehler in Rails, der die Datenbank überprüft, um den Typ zu ermitteln, der für die Multiparameterattribute benötigt wird. Meine Vermutung ist, dass Ihr Attribut "date_time" nicht mit einer Zeitspalte in Ihrer Datenbank verknüpft ist.
Ich habe dieses Problem kürzlich gelöst, als ich ein Nicht-Datenbankattribut für akzeptierte Multiparameterattribute wünschte, das war die beste Lösung, die ich mir vorstellen konnte:
Ich habe festgestellt, dass ich einen attr_accessor
setzen wollte, um ein Datum an mein Modell in einem form_for
-Tag mit dem Helfer f.datetime_select
zu übergeben. Das also habe ich:
Modell:
%Vor%Anzeigen:
%Vor%Leider, wenn ich mein Formular abschicke, bekomme ich folgendes:
%Vor% Nun, es stellt sich heraus, dass es sich um einen Rails-Bug handelt, für den ein Ticket eingereicht wurde. In der Zwischenzeit wie machen wir das? Die einzige Lösung, die ich finden konnte, die im entferntesten attraktiv war, war die Verwendung von composed_of
als Ersatz für attr_accessor
. so ...
Modell:
%Vor% Ich weiß fast nichts über die composed_of
-Methode, also sollten Sie wahrscheinlich selbst darüber lesen, aber was ich weiß, ist, dass es sowohl einen Leser als auch einen Schreiber für die gegebene Instanzvariable und, was noch wichtiger ist, den Setter erstellt akzeptiert Multiparameter-Attribute. Wie ich die Optionen gewählt habe:
Klassenname: Der Name unserer erwarteten Klasse. In diesem Fall Time
Mapping: Das erste Argument ist die Klasse und das zweite Argument scheint mit jeder Methode zu funktionieren, auf die eine Instanz der Klasse reagiert. Ich wählte to_s
Konstruktor: Nicht wirklich sicher, wie das funktionieren soll. Scheint aufgerufen zu werden, wenn @my_time
ist nil
.
Konverter: Nicht wirklich sicher, wie das funktionieren soll. Scheint von my_time = angerufen zu werden, scheint aber nicht mit Massenzuweisung angewendet zu werden.
Ein Problem, auf das ich mit dieser Lösung stieß, war, dass die Zeiten in UTC anstatt in der Zeitzone der Umgebung eingestellt wurden. Leider können wir my_time nicht direkt verwenden, sondern müssen es in die richtige Zeitzone umwandeln:
Ich hatte das gleiche Problem mit einem Datums-Dropdown, das nicht von einem Datenbankattribut unterstützt wurde. Ich habe eine kleine Rack-Middleware geschrieben, um mit dem Problem fertig zu werden:
%Vor%Und in application.rb stelle ich
%Vor% Beachten Sie, dass ich hier nur eine Datumszeichenfolge erstelle. Wenn Sie also auch Zeit benötigen, müssen Sie date_params
anders erstellen.
Ich hatte das gleiche Problem mit dem unten stehenden Modell
%Vor%Das entsprechende Formular mit dem Feld für das Ablaufdatum:
%Vor%Wie von @gabeodess erwähnt, besteht das Problem darin, die Datenbank zu überprüfen, um den Typ abzuleiten. Die Lösung dafür war das Hinzufügen des folgenden Codes zum Modell, um in diesem Fall den Typ des benötigten Attributs anzugeben: expiration_date, also das Modell geändert, um das folgende zu sein
%Vor%Ich hoffe, das ist nützlich
Ich hatte das gleiche Problem. Ich habe gerade attr_accessible für dieses Attribut hinzugefügt und es funktioniert gut.
Ich hoffe, es hilft.
Tags und Links ruby-on-rails postgresql