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?
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
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