【问题标题】:Best way to handle this RESTfully最好的方式来处理这个 RESTful
【发布时间】:2010-09-21 04:30:51
【问题描述】:

我有一个 Scout 模型,除了标准 REST 操作之外,还需要两个操作:check_in 和 check_out。所以我的路线是:

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

但我需要向用户显示 show.html,并带有指向签入侦察员或签出侦察员的链接。为了使用相同的 show.html 视图并在 ScoutsController 中仅保留一个显示操作,我将 ?mode=check_in?mode=check_out 附加到 url 以指定这不是常规显示操作,因此显示“签入”和“签出”链接。

我曾想过创建一个 check_incheck_out 资源,但这似乎不适合 REST 模型,因为签入/签出是一项操作而不是资源。

有没有更好的方法来以 REST 方式处理这个问题?

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

但是,执行check_in 活动的用户可能需要进行编辑。例如,执行check_in 活动的用户可能会发现Scout 数据中的错误,通过编辑修复它,然后返回到他们的check_in 活动。通过mode 可以让我确定用户议程。此外,添加mode 允许我只使用一个显示/编辑/等视图并仅显示基于它的适当链接。

我可以将模式放入会话哈希中。无论哪种方式,结果都是一样的。

好处是一个非常简单的用户界面(对于非常简单的用户)。

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

【问题讨论】:

  • 如何确定应该显示 check_in 或 check_out 链接?这是侦察模型中的一个字段吗?还是这与当前用户的会话有关?您能否更详细地解释一下 scout、check_in 和 check_out 在现实世界对象中的含义?
  • 有一个角色为“check_in”的用户。此人是注册商。我目前有一个只有索引操作的 CheckInController,它允许用户搜索并找到要签入的童子军。 Scout 模型有一个checked_in 标志。这些都与用户会话无关。 HTH

标签: rest ruby-on-rails-3


【解决方案1】:

在我看来 check_in 和 check_out 与注册有关,因此我认为您需要其他资源进行注册。 check_in 将映射到创建,而 check_out 将映射到销毁。

  resources :registrations

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

【讨论】:

  • 侦察员是一个人,就像参加会议的人一样。将有一个登记台,童子军将在那里登记。 Check_out 适用于不合格的童子军。 Check_in 和 check_out 是操作。 Scout 模型有一个checked_in 状态标志。
  • 我更新了我的答案,但我仍然不清楚如果侦察员有标志,为什么需要在 URL 中传递 mode=。如果在 scout 模型中设置了标志,您不能只检查是否根据您正在查看的侦察员设置了该标志吗?
  • 现在对我来说更有意义了。如果您认为 Scout 应该是资源,那么我会同意。在我看来,有时强制所有操作都“完全”为 RESTful 有点矫枉过正。它可以让您创建的资源感觉不自然,就像您的设计中的情况一样。最终,它归结为成本/收益。我认为您的解决方案有效,并且当您的方法可以理解时,尝试找出“完美”的 RESTful 方式是否真的值得。就模式而言,我认为没有任何问题。如果我需要稍微不同的显示视图,我会传递参数。
  • 我想我唯一推荐的是将成员资源方法更改为“put”,因为您正在使用 check_in 和 check_out 更新侦察模型中的标志(我认为??)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-09
  • 2023-03-11
  • 2023-03-31
  • 1970-01-01
  • 2021-02-03
  • 1970-01-01
相关资源
最近更新 更多