我已经堆了好几天,尝试了一切。
我正在尝试做一个简单的有很多关联,但它拒绝工作:
我需要的是每个orb获得与之关联的orb_type。
我生成脚手架:
rails generate scaffold orb_type nome
rails generate scaffold orb nome:string descr:text orb_type_id:integer
制作rake 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>
这笔交易是什么?下划线和轨道“惯例”令我头疼。
我看到了很多其他类似的主题,但他们的解决方案都没有用!
答案 0 :(得分:2)
在orb_type_id
模型中设置Orb
是问题的一部分。您说Orb
有很多OrbTypes
,但orb_type_id
基本上只允许一个而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
答案 1 :(得分:2)
你的关系是错误的。 (你的脚手架很好,只需要切换belongs_to
和has_many
。)
更改模型:
class Orb < ActiveRecord::Base
belongs_to :orb_type
validates_associated :orb_types
attr_accessible :descr, :nome, :orb_type_id
validates :nome, uniqueness: true, presence: true
end
class OrbType < ActiveRecord::Base
has_many :orbs
attr_accessible :nome
validates :nome, uniqueness: true, presence: true
end
现在可以为一个球体提供一种类型,并且可以为许多球体提供类型。