2016-11-01 4 views
0

2つのモデル 'articles'と 'bookmarks'があり、foreign_keyとして特定の列 'article_doi'を使用してそれらを関連付けました。Rails has_manyとbelongs_toはnilを返します

article.rbで

、bookmark.rbで

has_many :bookmarks, class_name: 'Bookmark', foreign_key: "article_doi", dependent: :destroy 

belongs_to :article, class_name: 'Article', foreign_key: "article_doi" 

しかし、私はarticle_object.bookmarksを行うときに、それはまた、nilの を返す私はbookmark_object.articleを行うときに、それをnilを返します。

何が間違っていますか?

+0

dbに関連付けを作成していない可能性が最も高い - 関連オブジェクトがまだ存在しないことを意味します。 –

+0

ありません。ブックマークテーブルでは、記事オブジェクトの 'doi'である値 'abc'を持つarticle_doi列のブックマークオブジェクトを持っています – krishna

答えて

1

@AndreyDeinekoが言ったように、動作するようにhas_many/belongs_toの関連付けを取得するためのカップルのステップがあります:

  1. あなたのモデルにhas_many/belongs_to宣言を追加します(あなたはこのすでにを行ったようが見えます)。
  2. database migrationを作成して実行して、データベースのbookmarksテーブルにarticle_doiの列を追加します(モデルはbelongs_toが参照を保持するテーブルです)。
  3. 新しい列に気づくように、レールサーバーまたはコンソールを再起動します。

最後に、実際にリンクされているデータベースの一部のレコードを保存する必要があります。

a = Article.first 
b = a.bookmarks.build 
b.save! 
a.reload.bookmarks.count # => 1 
+0

article_doi列と両方の表記事テーブルに「doi」という列があります。ブックマークテーブルのarticle_doi列。 – krishna

+0

あなたは正しいです。ブックマークテーブルだけに 'article_doi'カラムが必要です。私の答えを編集しました! – gmcnaughton

関連する問題