2011-10-05 29 views
5

Ben yaşıyorum: http://railscasts.com/episodes/102-auto-complete-associationRaylar 3 find_or_create_by

Her şey yolunda görünüyor. Ben bir fatura ve aynı zamanda bir istemci oluşturmaya çalışıyorum. Çalışıyor. Her şey harika. istemci

Buuut belongs_to hesap faturaya belongs_to faturasını belongs_to

istemci, her iki model (Müşteri ve Fatura) zorunlu özniteliği: ACCOUNT_ID. Ben bir hatayı :client_id: - can't be blank

nedeni bir ACCOUNT_ID gerektiren çünkü ben bir istemci oluşturulamaz çünkü bu kadar bu hatayı alıyorum olsun anında yeni bir müşteri oluşturmak çalışıyorum

Müşteri modeli. Müşteri modelinde bu satırı validates :account_id, :presence => true kaldırırsam, fatura eklenir ancak Müşteri'nin account_id öğesi yoktur.

Ben Raylar için

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 

cevap

4

çek invoice.rb ActiveRecord Sorgu Arayüz bu yazma-up varsayılan bir değer @client.account_id = current_user.account_id

ayarlamak için oluşturmak eylem clients_controller.rb içinde bu var 3. x:

http://guides.rubyonrails.org/active_record_querying.html (bölüm "15 Dynamic Finders" bölümüne bakın)

http://m.onkey.org/active-record-query-interface

Önce hesabı, sonra müşteriyi, ardından faturayı oluşturmanız gerekir - aksi takdirde doğrulamalarınız başarısız olur.

O böylece bunun için bir fikir edinmesini,

a = Account.find(current_user.account_id) 

c = a.clients.create(:name => "new client") 
a.save # better "save" than sorry ;-) 

c.invoices.create(:invoice_date => Time.now) 
c.save 

Ben raylar konsolunu kullanarak geliştirme veritabanında bu uğraşırken öneriyoruz .: ör ebeveynleri aracılığıyla müşteri ve fatura oluşturmak en iyisi olacaktır.

+0

Hesap zaten oluşturuldu. Giriş yapmış olan kullanıcının zaten bir account_id var ve bu "current_user.account_id" gibi erişilebilir. Sorun, yeni hesap kaydıyla aynı account_id değerini alıyor. Şu an kodunuzla oynayacağım. – leonel

+2

Bu fatura modelimde var 'define organization_name = (name); self.organization = Organization.find_or_create_by_name (name); name.blank değilse; end' current_user modele erişilemiyor. – leonel

+0

Hesap kaydından başlayarak yeni müşteri kaydı oluşturursanız, hesap_krasını devralır ... yukarı bakın. – Tilo