2012-04-18 12 views
2

私が現在持っている2機種の設定:アソシエーション付きのモデルをレールコンソールに作成しますか?

class Topic < ActiveRecord::Base 
    belongs_to :category 
end 

class Category < ActiveRecord::Base 
    has_many :topics 
end 

私は今、レールコンソールに関連するカテゴリとトピックを作成しようとしています:

t = Topic.new :name => "Test", :category => Category.find(1) 

トラブルがCATEGORY_IDたモデルであるが、ので、私は「を使用する必要がありますdは:

c = Category.find(1) 
t = Topic.new :name => "Test", :category_id => c.id 

をしかし、私は何度も見てきただけで使用する機能:代わりのカテゴリ:CATEGORY_IDを、カテゴリOBJに渡しますオブジェクトidの代わりにect。どこが間違っていますか?

私は:

c = Category.find(1) 
t = Topic.new :name => "Test", :category => c 

私が受け取る:

ActiveRecord::UnknownAttributeError: unknown attribute: category 
+0

使用しているレールのバージョンは? –

+0

私は3.1.3を使用しています。ありがとう。 –

答えて

5

あなたはちょうどこれを行うことができる必要があります:モデルの関連定義ができますものです

c = Category.find(1) 
t = Topic.new :name => "Test", :category => c 

をこれをして。

興味深いノートで、あなたが使用することができます。CATEGORY_IDを、まだちょうどオブジェクトに渡し、それはあなたのためのIDを取得します:

t = Topic.new :name => "Test", :category_id => c 

少しよりよいすることができ、それを行うのですか別の方法:

t = c.topics.build(:name => "Test") # Builds an object without saving 

t = c.topics.create(:name => "Test") # Builds an object and saves it 
+0

こんにちは。答えをありがとう。最初の例のようにすると、 "ActiveRecord :: UnknownAttributeError:unknown attribute:category"というエラーが表示されます。私の団体は自分の投稿ごとに設定されています。無料の情報もありがとう。 –

+0

t = c.topics.build(:name => "Test")行を実行しても同じことが起こりますか? –

+0

そのために、私は "NoMethodError:#のための未定義メソッド' topics 'を受け取りました。私の移行では、テーブルを作成するときにt.references:categoryを使用しました。私はこの関係を定義する必要がある他の場所を見ることができません。 –

関連する問題