2011-10-05 6 views
5

私は次のとおりですhttp://railscasts.com/episodes/102-auto-complete-associationRails 3 find_or_create_by

すべてうまく見えます。私はインボイスとクライアントをその場で作成しようとしています。それは動作します。すべてクールです。クライアントbelongs_toのアカウント 請求書

Buuut belongs_toのアカウント 請求書belongs_toの

クライアント、両方のモデル(クライアントおよび請求書)は必須の属性があります:ACCOUNT_IDを。

私はその場で新しいクライアントを作成しようとしている私は、エラー私はそれがでACCOUNT_IDを必要としているため、クライアントを作成することができないからだと、このエラーを取得してい:client_id: - can't be blank

理由を取得クライアントモデル。クライアントモデルでこの行validates :account_id, :presence => trueを削除すると、請求書が追加されますが、クライアントにはaccount_idはありません。

私は

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 

答えて

4

invoice.rbデフォルト値@client.account_id = current_user.account_id

を設定するアクションを作成するにclients_controller.rbでこれを持っているかのRails 3用のActiveRecordクエリーインターフェイス上でこれらのライトアップを確認してください。 X:

http://guides.rubyonrails.org/active_record_querying.html(セクション "15 Dynamic Finders" を参照)

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

まずアカウントを作成してからクライアントを作成し、次に請求書を作成する必要があります。それ以外の場合、検証は失敗します。

それは例えば、両親を介してクライアントと請求書を作成するのが最善です。:

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 

私はあなたがそれの感触を得る 、レールコンソールを使用して開発データベースにこれで遊んでお勧めします。

+0

アカウントはすでに作成されています。ログインしたユーザはすでにaccount_idを持っており、この 'current_user.account_id'のようにアクセスできます。問題は、新しいクライアントレコードに非常に同じaccount_idを取得することです。私はあなたのコードで今遊びます。 – leonel

+2

これは私の請求書モデル 'def organization_name =(name);にあります。 self.organization = Organization.find_or_create_by_name(name);ただし、name.blank? end'モデルではcurrent_userにアクセスできません。 – leonel

+0

アカウントレコードから新しいクライアントレコードを作成すると、それはaccount_id ...を継承します。上記を参照してください。 – Tilo