multiparameter error mit datetime_select

9

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?

    
Christian Fazzini 17.01.2011, 10:08
quelle

6 Antworten

4

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:

%Vor%     
gabeodess 22.02.2011, 02:57
quelle
0

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.

    
Clemens Helm 10.06.2012 19:46
quelle
0

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

    
Thresh 26.01.2014 13:23
quelle
-1

Entfernen Sie :include_blank => false aus Ihrem Code.

%Vor%

Danke ....

    
Anubhaw 17.01.2011 10:26
quelle
-5

Ich hatte das gleiche Problem. Ich habe gerade attr_accessible für dieses Attribut hinzugefügt und es funktioniert gut.

Ich hoffe, es hilft.

    
Rushabh Ajay Hathi 27.11.2011 11:30
quelle

Tags und Links