2016-06-02 11 views
0

In meinem Ich habe eine Datumsauswahl, die das ausgewählte Datum im Format %m/%d/%Y an den Server übergibt. Beispiel: "30.05.2016".Erstellen von Schienenobjekt mit Datumsattribut im Format "% m /% d /% Y"

Im create Aktion, wenn ich das Objekt mit den übergebenen in params instanziiert: Schienen versteht nicht, wie das Datum Attribut initialisiert werden basierend auf dem Format das Datum in durch die Parameter übergeben wird, so dass es nur das Datum Attribut legt zu Null. Beispiel:

#blogs_controller.rb 
class BlogsController < ApplicationController 
    def create 
    @blog = Blog.new(blog_params) # does not understand how to initialize the some_date attribute based on the format it is passed in as, so it initializes the some_date attribute to nil 
    @blog.save 
    redirect_to some_path 
    end 

    private 

    def blog_params 
    params.require(:blog).permit(:some_date) 
    end 
end 

This question schlägt eine initializer Datei zu erstellen, die es macht, so dass Schienen wird dieses Format verstehen, wenn es in die Parameter übergeben wird, aber es hat nicht funktioniert für mich. Es wird noch initialisiert das Datum auf Null:

#initializers/date_format.rb 
Date::DATE_FORMATS[:default] = "%m/%d/%Y" 

ich dies auch in dieser initializer Datei versucht, und es gab einige Fehler mit ihm so würden Schienen nicht einmal den Server starten:

ActiveSupport::CoreExtensions::Date::Conversions::DATE_FORMATS[:default] = '%m/%d/%Y' 

Frage: Wie kann ich es so einrichten, dass, wenn ein Datumsattribut im Format %m/%d/%Y übergeben wird: Rails weiß, wie man dieses Attribut richtig setzt und das Objekt erfolgreich in der Datenbank speichert?

Antwort

1

Ich würde über einen benutzerdefinierten Setter in dem Modell denken.

Vorausgesetzt, dass Sie das Datum Attribut benannt published_at die Setter könnte wie folgt aussehen:

def published_at=(date_string) 
    write_attribute(:published_at, Date.strptime(date_string, '%m/%d/%Y')) 
end 
+0

Hat Schienen diese Methode automatisch anrufen, wenn ich rufe 'Blog.new (blog_params)'? Es wirft derzeit einen Argumentfehler auf: falsche Anzahl von Argumenten (1 gegeben, erwartet 2). Ich habe versucht, die Dokumente auf '# write_attribute' zu ​​betrachten und bin mir nicht ganz sicher, wie ich diesen Wert erfassen soll, wenn er dieses Objekt im Kontext von' access_nested_attributes' erzeugt, weil dieses Attribut innerhalb von params anders übergeben wird. http://apidock.com/rails/ActiveRecord/AttributeMethods/Write/write_attribute – Neil

+0

Danke spickermann! Du bist und warst ein Lebensretter !!! – Neil

Verwandte Themen