2013-09-16 30 views
1

我堆疊了幾天,嘗試了一切。不能得到has_many和下劃線工作

我試圖做一個簡單的有很多關聯,但它拒絕工作:

我需要的是每個ORB獲得與之相關聯的orb_type。

我產生支架:

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

使耙分貝:遷移,

變化模型:

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 

然後tryed,使其工作:

$ 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 

and in the最後一行我得到的錯誤:

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

什麼是交易?下劃線和導軌「公約」給我頭痛。

我看到很多另一個類似的話題,但他們的解決方案都沒有工作!

回答

2

你的公會是南轅北轍。 (你的支架都很好,只需將belongs_tohas_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 

現在的天體可以被賦予一個類型,一個類型可以爲許多球體。

+0

你是第一個真正幫助我的人!很多比! – Techmago

2

Orb模型中有orb_type_id是問題的一部分。您的意思是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 
+0

我把orb_type_id放在那裏,因爲另一個教程告訴我這樣做。我得到了這個例子工作...但它沒有任何下劃線,我不能再現我的情況,因爲我想知道的原因:P – Techmago

+0

下劃線對此問題沒有影響。我一直使用它們,沒有問題與我的模型。看起來問題在於你的模型結構,而不是命名約定。你想完成什麼,我可以更新我的答案。從你的問題的外觀來看,Orb只有一個或多個OrbTypes可能會有所不同。 – kobaltz

+0

我只是想讓每個物品有一個orb_type – Techmago