2012-02-27 48 views
0

我是一般的Rails和Web開發新手。我試圖更好地理解根據哪個用戶正在訪問某個頁面,在我的視圖上呈現不同按鈕的選項。我正在使用Rails 3.2。在Rails中管理動作按鈕狀態的最佳做法

2我具體情況:

  1. 在我的電影頁面,我想顯示書籤按鈕。該按鈕應該說「添加書籤」,如果用戶未登錄或者電影不在用戶書籤列表中,則不會檢查。如果用戶在她的書籤中添加了電影,該按鈕應該說「刪除書籤」並且被檢查(帶有「活動」css類)。

  2. 如果用戶搜索「動作電影」,視圖呈現電影列表。根據電影是否在用戶的書籤列表中,列表中的每個項目都應顯示「添加書籤」/「刪除書籤」按鈕。

根據我的用戶狀態,管理我的按鈕文本,操作和顯示的最佳實踐是什麼?代碼去哪兒(view,javascript ...)以及我需要實現哪些關鍵方法?

回答

0

那麼,最好的做法是使用類似Draper:https://github.com/jcasimir/draper的東西,它負責根據一組條件呈現正確的內容。

然而,這會工作,但應該probalby被重構到一個德雷珀裝飾:

<% if user.has_bookmarked(@movie) %> 
    <%= link_to 'Remove bookmark', remove_bookmark_path%> 
<% else %> 
<%= link_to 'Add bookmark', add_boookmark_path %> 

但同樣,在裝飾你可能只是做一次

def display_correct_bookmark_link_for_movie(movie) 
    if current_user.has_bookmarked(movie) 
    h.link_to 'Remove bookmark', remove_bookmark_path 
    else 
    h.link_to 'Add bookmark', add_boookmark_path 
    end 
end 

,然後在你的看法你可以撥打電話:

<%= display_correct_bookmark_link_for_movie(@movie) %> 

否則,你會重複這個邏輯遍佈你的觀點,這是不好的。

顯然有些是僞代碼,但我認爲你得到了我的漂移。