2011-06-08 101 views
0

我在我的控制器中目前有我的參加方法。我的問題是我如何知道是否將此放入事件或用戶模型與我的事件控制器?我也將添加另一個方法remove_attend,這將做相反的參加。我在什麼時候將這些方法放入模型中?我應該把它放在我的控制器或模型中嗎?

def attend 
    @event = Event.find(params[:id]) 
    if @event.users.include?(current_user) 
     flash[:error] = "You're already attending this event." 
    else 
     current_user.events << @event 
     flash[:success] = "Attending event!" 
    end 
    redirect_to @event 
    end 

回答

3

它屬於事件控制器。 Flash消息或重定向不能放入模型中。所以,當你看到任何一個時,都可以假定它們是控制器材料。

它屬於事件控制器,因爲參與引用的資源是事件。從這個意義上說,您可以創建,編輯或參加一個活動。

+0

所以我們可以說我需要一種方法來刪除用戶和事件之間的關係......並且我需要這個方法在事件和用戶視圖/控制器中都可用...我應該把它放在事件助手中嗎?這屬於哪裏? – 2011-06-08 03:22:46

+0

理想情況下,這應該屬於事件模型。你應該在偶數模型上有一個刪除方法。然後,用戶可以使用像user.event.remove這樣的關聯代理來調用該方法。這是Rails的美麗:) – Spyros 2011-06-08 03:30:31

+0

最後一個問題:我在事件模型中做了一個remove_attendance方法。我應該直接從視圖中調用該方法,還是應該在兩者之間放置一個控制器? – 2011-06-08 03:32:51

0

我將這段代碼留在控制器中。如果您開始訪問此代碼中的用戶屬性(例如,檢查用戶的類型或他們已經參加的事件的數量),那麼將該代碼移動到用戶模型可能是一個好主意。

0

這應該在控制器中,模型只能被調用來編輯或檢索數據。

從我看到它看起來像你引用一個對象(current_user)不是你調用該方法的類的屬性,這不應該發生在模型中。

相關問題