ruby-on-rails – DRYing rails檢視:partial vs helper
參見英文答案 >ofollow,noindex" target="_blank">When to use Helpers instead of Partials 6
我需要關於DRYing檢視程式碼的最佳做法的建議.
我的應用程式中有三個類(NewsItem,RssItem和BlogItem),它們使用單獨的檢視,但在其中包含類似的部分.其中一個部分是這樣的:
<% if current_user %> <footer> <%= marks_bar(@item) %> <%= favorite_button(@item, "blog_item") || delete_from_favorite_button(@item, "blog_item") %> <%= share_button(@item) %> <% if current_user.is_mine?(@item) %> <div><%= link_to "Edit", edit_user_blog_item_path(current_user, @item) %></div> <% end %> </footer> <% end %>
所有這三個班級幾乎相等,所以我決定把它帶到一個不同的地方.在這裡我很困惑:我應該使用部分或幫助方法嗎?
我知道幫助器主要用於將ruby程式碼與HTML分離,但在這種情況下,幫助器將如下所示:
def toolbar_for(item, type_str, edit_path) if current_user content_tag(:footer) do |b| marks_bar(item).to_s << (delete_from_favorite_button(item, type_str) || favorite_button(@item, type_str)).to_s << share_button(@item).to_s << (content_tag(:div) { link_to("Edit", edit_path)} if current_user.is_mine?(@item)).to_s end end end
所以這裡幾乎沒有HTML程式碼.
你能給我建議,你認為什麼方法更好,為什麼?此外,這些方法中是否存在一些效能問題(例如,多個字串連線或頻繁的部分載入可能是昂貴的)? (這個程式相當高負載)
我會說這是一個很好的例子.
我預留助手來生成任意動態內容.這是一個鬆散的描述,所以一個例子如何:我會做一個幫助器,分割一個ActiveRecord物件陣列,並將它們顯示為N列.在這種情況下,傳遞的物件的結構以某種方式被利用,以便生成內容,但內容本身並不重要.如果你想到,form_for也適合這個描述.
相反,部分內容對於“靜態”內容是非常好的,需要在多個頁面上重複使用.例如,您將建立一個部分來渲染單個專案.部分確定特定專案的“靜態”表示.
在我看來,你的例子更適合第二個垃圾桶.由於@item沒有被操縱以生成內容,實際上它幾乎不被使用.似乎這個幫手大多是其他適當建立的助手的貼上程式碼(share_button和marks_bar).完美的用例為部分!
程式碼日誌版權宣告:
翻譯自:http://stackoverflow.com/questions/6848393/drying-rails-view-partial-vs-helper