2016-07-20 40 views
2

Ich verwende Rails 4.2.4. Ich habe eine Tabelle "my_objects" mit einer Spalte "address_id", das ist ein Fremdschlüssel zurück zu meiner "Adressen" -Tabelle. Also in meinem my_object.rb Modell hatte ich zum Speichern des Objekts und die Adresse zugleich ein Verfahren zu schaffenIn Rails, wie kann ich eine Umwandlung von einem String in ein Objekt erzwingen, wenn mein Formular übermittelt wird?

belongs_to :address, :autosave => true, dependent: :destroy 
    def save_with_address 
    transaction do 
     if !self.address.nil? 
     address = Address.new(self.address) 
     address.my_object = self 
     address.save 
     self.address = address 
     end 

     # Save the object 
     save 
    end 
    end 

Als Referenz meiner Adresse Objekt (die eine state_id Spalte dn country_id Spalt in der Datenbank hat) ist wie so strukturiert ...

class Address < ActiveRecord::Base 
    belongs_to :state 
    belongs_to :country 
    has_one :my_object 
end 

Allerdings, wenn ich meine Form vorlegen, mit den unten angegebenen Daten

Parameters: {"utf8"=>"✓", "my_object"=>{"id"=>"", "name"=>"Dave20", "day"=>"07/06/2016", "distance"=>"10", "distance_unit_id"=>"5", "hour"=>"00", "minute"=>"04", "second"=>"05", "address"=>{"city"=>"baltimore", "state"=>"3555"}, "my_object_times_attributes"=>{"0"=>{"overall_rank"=>"", "age_group_rank"=>"", "gender_rank"=>"", "time_in_ms"=>"245000"}}}, "commit"=>"Save"} 

diese Zeile „Adresse = Address.new (self.address)“ ist ich nicht an th e Fehler, "ActiveRecord :: AssociationTypeMismatch (State (# 70161141072220) erwartet, bekam String (# 70161059455060)):". Offenbar konvertiert Rails meine Status-ID-Zeichenfolge nicht in ein Objekt. Wie kann ich es machen?

Antwort

0

Ihr Address Modell ist abhängig von zwei weiteren Modellen State und country, Also, wenn Sie versucht haben, für Address neues Objekt zu erstellen, indem Sie die self.address vorbei, es ist der Fehler zu erhöhen.

um dieses Problem zu lösen, die Sie durch creatting neues Objekt für state und country von übergebenen Wert und geben diese objec zu Address.new, jetzt state und country Pass als string Änderungen in Ihrem Code vornehmen müssen, so obviouly wird es nicht gehen zu arbeiten

Hoffe, das wird helfen.

+0

Gibt es eine Möglichkeit, die Namen der Parameter zu ändern, so dass die Konvertierung automatisch erfolgt? Wenn das nicht möglich ist, könnten Sie Beispiele zu Ihrem Kommentar "Änderungen in Ihrem Code durch Erstellen eines neuen Objekts" angeben? – Dave

+0

Sie müssen angeben, dass das Feld 'state' und' country' in Ihrem Formular angezeigt wird und den Wert als 'state_id' und' country_id' für Ihr 'Address'-Modell übergeben. – hgsongra