2012-02-16 22 views
0

私はRailsにはかなり新しく、初心者の質問があります。しかし、別のモデルを使用してモデルにレコードを作成する方法は?

def create 
    @project = current_user.projects.build(params[:project]) 
end 

:私は私のプロジェクトのコントローラでこれをやりたい新しいプロジェクトを作成するには<プロジェクト

から<クライアント -

ユーザー:

は、私は三つのモデルを持っています私はいつもclient_idが見つからない、つまり私が想定しているProjectsテーブルでは設定できないというエラーを受け取ります。

ここで私が何が欠けているか教えてもらえますか?私は

@user.projects.build()

仕事をしなければならないと思った私は、私のユーザーモデルでは

...

has_many :projects, :through => :clients

...。しかし、それはしません。

+1

これをマイグレーションファイルに追加し、db:migrateを実行しましたか? – wintersolutions

+0

はい、私はそれをした – Tintin81

答えて

1

私はあなたのプロジェクトテーブル/モデルはあなたが

current_user.projects.build(params[:project]) 

を使用する場合、私はあなたが

active_project = current_user.active_project 
active_project.clients.build(params[:project]) 

これは一例であるようなものを使用して使用されるべきだと思う使用して指定しているのclient_idを必要だと思います。

1

あなたの関連団体から、Projectは、Userに属するClientに属します。あなたは再設計を検討したいかもしれません。

しかし、あなたは、現在のデザインを維持したい場合、あなたはカップルの方法

@client = Client.find params[:client] 
@project = @user.project.build params[:project], :client_id => @client.id 

OR

@project = @user.clients.find(params[:client]).projects.build(params[:project]) 

にどちらの方法をこのエラーを修正することができ、ユーザーはプロジェクトを持っていません。クライアントにはプロジェクトがあります。 Projectモデルを結合モデルにすることができます。この場合、...

# user.rb 
    has_many :clients, :through => :projects 

# client.rb 
    has_many :users, :through => :projects 

# project.rb 
    belongs_to :clients 
    belongs_to :users 
+0

こんにちは、あなたの助けをありがとう。なぜ私の団体は正しく見えないのですか?私のアプリケーションでは、ユーザーは自分のクライアントを管理しているはずで、順番にプロジェクトを割り当てることができます。これは実行可能ではありませんか? – Tintin81

+0

2番目の例は、フォームからclient_idを取得する方法がわからなくても(魅力的な選択肢として理想的です)、charmeのように機能します。 '@project = current_user.clients.find(1).projects.build(params [:project])' – Tintin81

+0

あなたが与えた最初の例はここでエラーを引き起こします:**間違っています引数の数(2の1)**。そして、私は '@ user.projects'ではなく' @ user.projects'でしか動作しないと思います。 – Tintin81

1

あなたがその電話をかける問題、クライアントが、これは上構築しのですか?ちょうどcurrent_user.projectsに建物はこの情報を提供しません。これを解決するには、使用するクライアントの情報を提供するためにフォームやルーティングを調べる必要があります。

たとえば、フォームを実際にクライアントで開始し、フォームにネストされたリソースを使用して新しいプロジェクトを提供することができます。

+0

はい、ドロップダウン選択ボックスを通して 'client_id'を提供したいのですが、どうすればいいのか分かりません。これはどうすればできますか? – Tintin81

+0

これらの鉄道駅をチェックしてください:http://railscasts.com/episodes?utf8=%E2%9C%93&search=nested – DGM

+0

チップをありがとう、それは非常に有用であることがわかりました! – Tintin81

関連する問題