最好的方式来处理这个RESTfully
我有一个侦察员模型除了标准的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_in
和check_out
资源,但这看起来不符合REST模型,因为检入/退出是一个操作而不是资源。
有没有更好的方法来处理这种RESTfully?
更新:该模式来自不同的用户,不同的议程(即工作流程)。一个用户可能需要显示和编辑Scout数据,而另一个用户只能执行check_in
活动。
但是,正在执行check_in
活动的用户可能需要编辑。例如,执行check_in
活动的用户可能会在侦察数据中发现错误,通过编辑进行修复并返回到其活动check_in
活动。通过mode
允许我确定用户议程。此外,添加mode
允许我只使用一个show/edit/etc视图,并根据它显示适当的链接。
我可以把模式放在会话哈希中。无论哪种方式,相同的结果。
好处是非常简单的用户界面(非常简单的用户)。
在我看来,侦察员是资源,check_in
和check_out
是行动。但使用该模式似乎很尴尬。但也许它确实是最好的方法。这是我的问题。
在我看来,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"
侦察员是一个人,就像一个会议的与会者。会有一个注册台,侦察员将check_in。 Check_out是不合格的童军。 Check_in和check_out是动作。侦察员模型具有状态的'checked_in'标记。 – Karl 2010-09-21 20:06:15
我更新了我的答案,但是我仍然不清楚为什么你需要在URL中传递mode =,如果侦察员有标志。如果该标志设置在侦察兵模型中,你是否可以根据你正在看哪个侦察兵检查该标志是否被设置? – johnmcaliley 2010-09-22 02:09:38
不,请参阅更新。 – Karl 2010-09-22 03:12:29
你如何确定是否应显示check_in或check_out链接?这是侦察模型中的一个领域吗?或者这与当前用户的会话有关?你能否更详细地解释侦察,check_in和check_out代表真实世界对象? – johnmcaliley 2010-09-21 13:13:53
有一个用户的角色是“check_in”。此人是注册服务商。我目前有一个只有索引操作的CheckInController,它允许用户搜索并找到侦察到check_in。侦察员模型有一个'checked_in'标志。这与用户会话没有任何关系。 HTH – Karl 2010-09-21 20:09:12