2010-09-21 62 views
1

我有一个侦察员模型除了标准的REST动作check_in和check_out之外还需要两个动作。所以,我有我的路线:最好的方式来处理这个RESTfully

resources :scouts do 
    member do 
    get 'check_in' 
    get 'check_out' 
    end 
end 

但我需要显示show.html给用户,并链接到CHECK_IN侦察或CHECK_OUT侦察员。为了使用相同的show.html视图并在ScoutsController中只保留一个显示操作,我通过将?mode=check_in?mode=check_out附加到url来指定这不是常规的显示操作,因此显示“Check In”和“Check Out”链接。

我曾考虑过创建一个check_incheck_out资源,但这看起来不符合REST模型,因为检入/退出是一个操作而不是资源。

有没有更好的方法来处理这种RESTfully?

更新:该模式来自不同的用户,不同的议程(即工作流程)。一个用户可能需要显示和编辑Scout数据,而另一个用户只能执行check_in活动。

但是,正在执行check_in活动的用户可能需要编辑。例如,执行check_in活动的用户可能会在侦察数据中发现错误,通过编辑进行修复并返回到其活动check_in活动。通过mode允许我确定用户议程。此外,添加mode允许我只使用一个show/edit/etc视图,并根据它显示适当的链接。

我可以把模式放在会话哈希中。无论哪种方式,相同的结果。

好处是非常简单的用户界面(非常简单的用户)。

在我看来,侦察员是资源,check_incheck_out是行动。但使用该模式似乎很尴尬。但也许它确实是最好的方法。这是我的问题。

+0

你如何确定是否应显示check_in或check_out链接?这是侦察模型中的一个领域吗?或者这与当前用户的会话有关?你能否更详细地解释侦察,check_in和check_out代表真实世界对象? – johnmcaliley 2010-09-21 13:13:53

+0

有一个用户的角色是“check_in”。此人是注册服务商。我目前有一个只有索引操作的CheckInController,它允许用户搜索并找到侦察到check_in。侦察员模型有一个'checked_in'标志。这与用户会话没有任何关系。 HTH – Karl 2010-09-21 20:09:12

回答

0

在我看来,check_in和check_out与注册有关,所以我认为你需要另一个注册资源。 check_in会映射到create和check_out将映射到销毁。

resources :registrations 

    match 'check_in', :to => "registrations#create", :as => "check_in" 
    match 'check_out', :to => 'registrations#destroy', :as => "check_out" 
+0

侦察员是一个人,就像一个会议的与会者。会有一个注册台,侦察员将check_in。 Check_out是不合格的童军。 Check_in和check_out是动作。侦察员模型具有状态的'checked_in'标记。 – Karl 2010-09-21 20:06:15

+0

我更新了我的答案,但是我仍然不清楚为什么你需要在URL中传递mode =,如果侦察员有标志。如果该标志设置在侦察兵模型中,你是否可以根据你正在看哪个侦察兵检查该标志是否被设置? – johnmcaliley 2010-09-22 02:09:38

+0

不,请参阅更新。 – Karl 2010-09-22 03:12:29