2

私はこれで何日もスタックしており、すべてを試しました。

シンプルに多くの関連付けを実行しようとしていますが、機能しません:

私が必要としているのは、各オーブがそれに関連付けられた orb_type を取得することです。

私は足場を生成します:

rails generate scaffold orb_type nome
rails generate scaffold orb nome:string descr:text orb_type_id:integer

レーキを db:migrate にします。

モデルを変更します。

class Orb < ActiveRecord::Base
  has_many :orb_types
  validates_associated :orb_types
  attr_accessible :descr, :nome, :orb_type_id
  validates :nome, uniqueness: true, presence: true
end

class OrbType < ActiveRecord::Base
  attr_accessible :nome
  validates :nome, uniqueness: true, presence: true
  belongs_to :orb
end

そして、それを機能させようとしました:

$ rails c
1.9.3-p448 :001 > tipo = OrbType.new nome: "Planeta"
1.9.3-p448 :002 > tipo.save
1.9.3-p448 :003 > tipo = OrbType.find(1)
1.9.3-p448 :004 > planeta = Orb.new nome:"Testname", descr: "TestDescr"
1.9.3-p448 :005 > planeta.orb_type = tipo

そして最後の行でエラーが発生します:

NoMethodError: undefined method `each' for #<OrbType:0x00000003dc02a0>

どうしたんだ?アンダースコアとレールの「規則」が頭を悩ませています。

他にも同様のトピックをたくさん見ましたが、それらの解決策はどれもうまくいきませんでした!

4

2 に答える 2

2

モデルorb_type_idOrbがあることは問題の一部です。あなたはそれOrbがたくさんあると言っていますOrbTypesが、orb_type_idは本質的に 1 つだけを許可し、 は にOrbType属します。Orbつまり、OrbTypeは を必要としorb_idます。

多対多の関係が目標であると仮定すると、関連付けモデルが必要になる可能性が最も高くなります。

class Orb < ActiveRecord::Base
  has_many :orb_types, :through => :orb_associations
  has_many :orb_accociations
  validates_associated :orb_types
  attr_accessible :descr, :nome, :orb_type_id
  validates :nome, uniqueness: true, presence: true
end

class OrbAccociations < ActiveRecord::Base
  belongs_to :orb
  belongs_to :orb_type
end

class OrbType < ActiveRecord::Base
  attr_accessible :nome
  validates :nome, uniqueness: true, presence: true
  has_many :orb_associations
  has_many :orbs, :through => :orb_associations
end
于 2013-09-16T14:57:10.610 に答える