2015-05-04 33 views
0

我正在使用相同的模型構建圖像,視頻和文本帖子的源。 對於圖像文章,我有一個圖像列,文本一個正文字段,併爲視頻一個網址。我對每種類型的帖子都有單獨的部分。現在我正在通過這樣的帖子循環:循環播放不同類型的文章

<% @posts.each do |post| %> 

<% if post.image.present? %> 
    <%= render 'image_post' %> 
<% elsif post.body.present? %> 
    <%= render 'text_post' %> 
<% else %> 
    <%= render 'video_post' %> 
<% end %> 

<% end %> 

它開始變得雜亂,如果我添加任何更多類型的職位。有一個更好的方法嗎?

另外,假設我想循環播放視頻文章。我可以使用video_url存在而不是循環發佈帖子嗎? HTTP:

<% @posts.each do |post| %> 

<% if post.video_url.present? %> 
<%= render 'video_post' %> 
<% end %> 

<% end %> 
+1

這是一個很大的原因,瞭解單個表的傳承,你可以添加一個評判: //samurails.com/tutorial/single-table-inheritance-with-rails-4-part-1/。你在談論'類型'的職位。在OO設計中,這是一個明確的指標,您需要將您的對象分類。一旦你這樣做,這個問題將大大簡化。 –

+0

嘿喬,我研究了這一點,並認爲這是更好的方式,但對於我的特定項目,使用一個模型更容易和更快(和臨時)。 (還是)感謝你的建議。 – user2759575

回答

1

你模擬返回後

def type 
    return "image" if image.present? 
    return "text" if body.present? 
    return "video" 
end 

的類型在你看來

<% @posts.each do |post| %> 
    <%= render "#{post.type}_post" %> 
<% end %> 
+0

類型是有點保留的方法名稱,我認爲,導致它用於活躍記錄中的STI。 –

+0

簡單的解決方案。謝謝 :) – user2759575