Rails 3 find_or_create_by
Bin ich nach http://railscasts.com/episodes/102-auto-complete-association
Alles scheint in Ordnung. Ich bin versucht, zu erstellen eine Rechnung und auch eine client-on-the-fly. Es funktioniert. Alles cool.
client belongs_to-Konto
Rechnung belongs_to-Konto
Rechnung belongs_to-client
Buuut, beide Modelle (Client und Rechnung) haben ein obligatorisches Attribut: account_id.
Wenn ich versuche, erstellen Sie eine neue client on the fly bekomme ich eine Fehlermeldung :client_id: - can't be blank
Der Grund, warum ich immer diese Fehlermeldung es ist, weil ein Client kann nicht erstellt werden, da es die eine account_id in das Client-Modell. Wenn ich diese Zeile zu entfernen validates :account_id, :presence => true
im Client-Modell wird die Rechnung Hinzugefügt, aber Client hat keine account_id.
Ich habe dies in clients_controller.rb in der create-Aktion, um einen Standardwert @client.account_id = current_user.account_id
Rechnung.rb
validates :account_id, :presence => true
validates :client_id, :presence => true
def client_name
client.name if client
end
def client_name=(name)
self.client = Client.find_or_create_by_name(name) unless name.blank?
end
InformationsquelleAutor leonel | 2011-10-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
überprüfen Sie diese write-ups " in der ActiveRecord-Abfrage-Schnittstelle für Rails 3.x :
http://guides.rubyonrails.org/active_record_querying.html (siehe Abschnitt "15 Dynamic Finders")
http://m.onkey.org/active-record-query-interface
Müssen Sie das Konto zuerst, dann der Kunde, dann die Rechnung - sonst wird Ihre Validierungen fehl.
Es ist am besten zum erstellen der client-und der Rechnung durch Eltern, z.B.:
Ich würde empfehlen, das Spiel mit dieser in Ihrer Entwicklung Datenbank mit den rails-Konsole
so bekommen Sie ein Gefühl für Sie.
current_user.account_id
. Das problem ist immer, dass sehr gleichen account_id in der neuen client-Datensatz. Ich werde spielen, um mit Ihren code jetzt.Ich habe das in meiner Rechnung Modell
def organization_name=(name); self.organization = Organization.find_or_create_by_name(name); unless name.blank?; end
Den current_user kann nicht zugegriffen werden, die in einem Modell.wenn Sie die neuen client-Datensatz ausgehend von der Konto-Datensatz, dann wird es Erben, es ist account_id ... siehe oben.
InformationsquelleAutor Tilo