2011-08-07 7 views
0

私はTaskモデルとUserモデルを持っています。belongs_to:class_nameが奇妙に動作する

タスクを割り当てて処理することができますが、ユーザーには多くのタスクを割り当てることができます。

フィールド名が多少オフになっていますので、class_nameオプションなどを使用しようとしていますが、何らかの理由で奇妙な結果が出ています。私は、タスクが保存されるときに生成されるSQLを見たとき

タスク関連

belongs_to :assigned_to, :class_name => 'User', :foreign_key => 'assigned_to' 

ユーザ関連

has_many :assigned_tasks, :class_name => 'Task', :foreign_key => 'assigned_to' 

はまだ、それがASSIGNED_TO IDにnilを返す(それが整数列の) ..そしてTasks/Indexアクションが呼び出されているとき、フィールドにnull値で保存されているので、id = nullのユーザーをプルしようとしています。

I'v私はレールが初めてだから間違ったことをしている可能性が高いので、どんな支援も大歓迎です。

おかげ

+1

もっとコードを表示できますか?たぶんコントローラ – house9

答えて

0

は、私はあなたがFKで_id必要があると思う

:foreign_key => 'assigned_to_id' 

私はあなたのDBの列名も

が、これは本当に良いリソースhttp://guides.rubyonrails.org/association_basics.html

+0

から列は 'assigned_to'という名前になっているので、私はforeign_keyをそのように設定しています。レールが関連モデルを取り、 "_id"を末尾に追加するという印象の下にあったからですあなたは手動でforeign_keyを設定しない限り。 – Mike

+0

カラムの名前を変更するオプションがある場合は、それを行います。 – house9

1

あるassigned_to_idであると仮定しています私は間違った2つのことをしていた:

  1. selectタグを作成したときに、:user部分を含めるのを忘れていたので、パラメータが渡されたときにユーザーIDがユーザーオブジェクトの外側にありました。

  2. belongs_to:assigned_toは、データベース列と同じ名前です。選択フィールドが修正された後にパラメータが適切に入力されたとき、渡された値がオブジェクトではないと不平を言っていました。ユーザーが期待していた文字列などを受け取りました。アソシエーション名を変更するとこれが修正されました。これは100%の意味を持ち、なぜデータベースのフィールド名を間違えば変更するのですか?