2010-08-06 82 views
8

我正在尋找其他人如何組織他們的多態資源部分。爲多態資源組織部分

例子:

我有Image這是多態和取決於什麼是imageable,我想顯示的東西略有不同。

我有一個部分images/_image,可以撥打render imageable.images。我目前的想法是讓我的圖像部分檢查imageable是什麼類型,然後再有另一部分,特定於該情況。我的組織是沿着線的東西:

images/ 
    _image.html.haml 
    _product.html.haml 
    _post.html.haml 
    _user.html.haml 

_image部分看起來是這樣的:

%div 
    = render :partial => "images/#{imageable.type}" 

這看起來像一個不錯的辦法,或平出錯誤的做法?我認爲從任何地方撥打render imageable.images會比在各地撥打render :partial => ...好得多。

任何想法將不勝感激。你是怎麼做到的?

編輯:很長一段時間過去了,我仍然想知道如果任何人有任何輸入。拋出賞金,看看是否吸引了一些注意力。

回答

1

我有點在天氣之下,所以我無法測試它。但是你應該放入<%= render imageable.images %>,看看它說什麼。它應該工作,因爲它應該使用.modelname或.class :)如果它不起作用,我會做你正在做的,如上所述。如果它不起作用,請評論它所說的話,因爲那麼我可能會爲rails核心做一個補丁,真的應該這樣工作。

+0

嗨穆罕默德,謝謝你的迴應。可以說,我應該用主觀來標記我的問題(這可能會使我的賞金有點尷尬)。但是,是的,正如你所指出的那樣,它確實能夠工作。就人們如何處理這些事情而言,我的問題更主觀。我組織這些文件的方式對我來說似乎總是「骯髒」,並且正在尋找對其他人如何做到這一點的深入瞭解。乾杯。 – theIV 2011-05-21 20:13:42

+0

我會這樣做'<%= render resource%>'它更乾淨imo。雖然我可能不知道它會成爲蝙蝠的多態部分權利,但是找到它並不難,因爲它們都在那裏,更糟糕的情況是隻需在線上添加註釋或其他內容:) – 2011-05-21 20:57:19

1

我認爲你最初的想法是正確的軌道上,有一個小的調整:

= render imageable.images 

# images/_image.html.haml 
= render image.imageable_type.underscore, :object => image.imageable, :image => image 

# images/_product.html.haml 
// Custom code for product image (with product and image local variables) 
2

在你的代碼現在還不清楚的是_product實際上是一個_image

我認爲Rails的目的是要做到這一點是這樣的:

shared/ 
    _image.html.haml 
    imageable/ 
     _product.html.haml 
     _post.html.haml 
     _user.html.haml 

然後在_image部分你撥打:

render :partial => imageable/#{image.type}", :image => image

現在是從你的目錄結構清楚什麼你的多態性是。

(注:我用了shared目錄,但ofcourse當你的圖像部分是不實際視圖之間共享應該是在某些視圖目錄一樣,如果你確實有一個images_controller目錄應該叫做images

2

我認爲你有正確的方法,但我認爲清潔的最後一步是消除選擇另一個部分的圖像部分,而不是將該行爲交給幫手。就像是...

module ImagesHelper 
    def show_image(imageable) 
    render :partial => "images/#{imageable.class.to_s.tableize}" 
    end 
end