2011-06-08 67 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)不是你调用该方法的类的属性,这不应该发生在模型中。

相关问题