web-dev-qa-db-ja.com

Rails:HasManyThroughAssociationNotFoundError

has_many throughアソシエーションを機能させるのに問題があります。

私はこの例外を受け取り続けます:

Article.find(1).warehouses.build
ActiveRecord::HasManyThroughAssociationNotFoundError: Could not find the association :entries in model Article

関連するモデルは次のとおりです。

class Article < ActiveRecord::Base
  has_many :warehouses, :through => :entries
end

class Warehouse < ActiveRecord::Base
  has_many :articles, :through => :entries
end

class Entry < ActiveRecord::Base
  belongs_to :article
  belongs_to :warehouse
end

そしてこれは私のスキーマです:

create_table "articles", :force => true do |t|
  t.string   "article_nr"
  t.string   "name"
  t.integer  "amount"
  t.string   "warehouse_nr"
  t.datetime "created_at"
  t.datetime "updated_at"
  t.integer  "unit"
end

create_table "entries", :force => true do |t|
  t.integer "warehouse_id"
  t.integer "article_id"
  t.integer "amount"
end

create_table "warehouses", :force => true do |t|
  t.string   "warehouse_nr"
  t.string   "name"
  t.integer  "utilization"
  t.datetime "created_at"
  t.datetime "updated_at"
end
41
mcfoobar

追加する必要があります

has_many :entries

:throughオプションは、反対側を見つけるために使用する2番目の関連付けを指定するだけなので、各モデルに対して。

113
Jon Wood

追加する必要があります

has_many :entries

各モデルに対して、および上記のhas_many:throughは、次のようになります。

class Article < ActiveRecord::Base
  has_many :entries
  has_many :warehouses, :through => :entries
end

class Warehouse < ActiveRecord::Base
  has_many :entries
  has_many :articles, :through => :entries
end

ビューとコントローラーの処理方法に関するより詳細なチュートリアル https://kolosek.com/Rails-join-table/

3
Nesha Zoric

@Meekohiこれは、エントリモデルがないことを意味します。自分でエラーメッセージを受け取ったばかりなので、指摘したかった(評判が悪いためコメントとして投稿できない)。

class Entry < ActiveRecord::Base
  belongs_to :article
  belongs_to :warehouse
end

単に実行する

Rails g model Entry
1
mohnstrudel