2016-08-31 4 views
0

多くのチュートリアルを読んで、コードを正確にコピーしましたが、彼らがうまく機能しているとは思っていません。Rails Associationsは機能しません

私は最も基本的な "has_many"と "belongs_to"の関連付けを行っていますが、レールは何らかの関連付けを認識するのを拒否します。

"has_many"という電子メールがあります。電子メールは "belongs_to"ユーザです。コンソールで、

class Email < ActiveRecord::Base 
    unloadable 

    belongs_to :user 
end 

その後

user.rb

class User < ActiveRecord::Base 
    unloadable 

    has_many :emails 
    accepts_nested_attributes_for :emails, 
    :allow_destroy => true, 
    # :reject_if  => :all_blank 
end 

email.rb:ここに私のコードです実際

User.emails.build 
NoMethodError: undefined method `emails' for #<Class:0x00000006c16e88> 

、この "NoMethodErrorは" どんなにを持続します何。

現在のところ、私の推測では、レールを取り付ける間にハードウェアのコンデンサが焼損し、この1つを除いてすべてが動作することが予想されます。それともそれは何か他のものです:P

EDIT:

別のコンソールの試み:

my_user = User.new 
my_user.emails.build 

も未定義の "電子メール" の方法になります。

元のユーザークラスの末尾にカンマが付いていないことがわかりました。それを取り除くと、私はこのエラーを受け取ります:

ActiveRecord::UnknownAttributeError: unknown attribute 'user_id' for Email. 

答えて

1

ように使用してください、あなたは、データベース内のメールテーブルの上にuser_id属性を持っていることを確認する必要があります。あなたが持っていない場合は、それをマイグレーションで追加することができます。

次に、あなたが見たいユーザの電子メールのインスタンスをRailsに伝える必要があります。そのため、データベースにユーザーがいることを確認し(user = User.create)、そのユーザーの電子メールはuser.emailsを使用して見つけることができます。

+0

"belongs_to" user_idを生成しますか?興味深い – ineedahero

+0

@ineedahero:[続きを読む](http://edgeguides.rubyonrails.org/association_basics.html#the-belongs-to-association)。 – kiddorails

1

あなたはクラスとインスタンスの概念を混同しています。関連する関係を構築するには、Userクラスのインスタンスが必要です。このエラーは、emailsメソッドをClassオブジェクトで呼び出そうとしているので、これにはヒントがあります(NoMethodError: undefined method emails for #<Class:0x00000006c16e88>)。

何かのように試してみてください:

my_user = User.new 
my_user.emails.build 
+0

は、私が試したことも、同じエラー:未定義のメソッド「電子メール」 – ineedahero

1

をまずこの

@email = User.first.emails.build 
+0

結果:未定義のメソッド '電子メール#のための<ユーザー:0x00000004c34318> – ineedahero

+0

これは仕事 – Sunny

+0

すごい迫力になりますアンロード削除した後に確認してください、私のユーザークラスで私が持っていましたエラーを引き起こした末尾のカンマ - しかし、私はこのエラーが発生します: "ActiveRecord :: UnknownAttributeError:不明な属性 'user_id' for Email" – ineedahero

関連する問題