2014-05-20 58 views
2

我對Rails和設置關聯很新,所以我懷疑我錯過了一些非常明顯的東西。我試圖設置一個應用程序,其中一個模型具有兩個has_many模型。第二種模式屬於第一種,第三種是has_many。第三個可以屬於第一個或第二個模型。當關系是2-3深的時候,與has_many和belongs_to關聯的鬥爭

具體來說,我有一個牆模型,可以保存圖片和拼貼畫。牆可以保存圖片或拼貼畫或兩者都不。拼貼可以保存圖片。

class Wall < ActiveRecord::Base 
belongs_to :user 
has_many :collages 
has_many :pictures 
end 

class Collage < ActiveRecord::Base 
belongs_to :user 
belongs_to :wall 
has_many :pictures 
end 

class Picture < ActiveRecord::Base 
belongs_to :user 
belongs_to :wall 
belongs_to :collage 
end 

我得到的錯誤是告訴我:

未定義的方法`圖片「?爲#牆壁

有沒有我做錯了我創建的協會?

+1

應該是'Picture'大'P' – zishe

+1

感謝校正類 - 是一個錯字,而不是問題的根源。 – user3654821

回答

1

上的任何模型has_many association給出了方法

因此華爾街類有方法#pictures可通過這條線的複數形式:

如果你想獲得你應該使用關聯作爲belongs_to

#picture方法

如果您知道實際發生此錯誤的位置以及您要實現的功能,我們可以針對確切問題進行更多調試。

而且命名爲Picture類應與大寫的P

+0

資本問題被稱爲[CamelCase](http://en.wikipedia.org/wiki/CamelCase) –

0

@cvibha的回答可以幫助你與協會

然而,有可能需要考慮的另一個問題。你調用這個方法:

undefined method `picture?' for #Wall 

的Rails協會基本上創建一個記錄按你如何定義的關聯(has_many :pictures創建@wall.pictures)。但是,你打電話picture?

-

如果你有叫picture?一個自定義的方法,這應該工作(雖然沒有關聯的工作 - 在對方的回答中所述)。你的問題是,我不認爲你定義picture?

我這樣做:

#app/models/wall.rb 
Class Wall < ActiveRecord::Base 
    ... 
    def picture? 
     #your code 
    end 
end 

或者,如果你正在尋找驗證畫面的存在,你不妨在您的視圖中使用:

@wall.pictures.any? 
@wall.pictures.first.present? 
相關問題