我的应用程序目前有一个非常简单的URL布局:
map.resource :account, :controller => "users", :only => [:show, :update, :destroy]
map.resources :workouts do |workout|
workout.resource :chart, :only => [:show]
workout.resources :taggings, :only => [:destroy, :create]
end
为当前用户提供了很好的简单网址。 我现在正在添加一些公共功能 - 公众可以看到物品的能力。我想在这些URL之前添加用户的登录名。同时,除了一个锻炼资源之外,公共用户无需访问任何内容。我不确定最好的方法。我想结束看起来像这样的网址:
/teich/workouts/3454
大致是
/:user_login/workouts/:id
我是path_prepend吗?对于想要完整RESTful控件的当前用户,最佳做法仍然是使用其用户名前置而不是直接URL,就像我现在一样?我不担心与path_prepend的所有额外路由,因为我将:before
权限检查吗?
答案 0 :(得分:1)
实现此类目标的最简单方法可能是覆盖to_param
模型中的User
。
def to_param
"#{id}-#{login}"
end
Rails在为模型生成路径时使用此方法。然后,当找到字符串发送to_i
时将获取整数。
不要忘记你也需要逃避无效的网址字符。
答案 1 :(得分:0)
在API中包含URI定义或命名约定会违反REST体系结构的约束。请参阅:http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven