Rails:覆盖RESTful路径?

时间:2010-10-28 17:43:50

标签: ruby-on-rails rest routes

是否可以覆盖RESTful路径?

例如,我photo_path(photo)会生成/photos/12345

但我希望photo_path的所有用途实际生成类似/photos/joeschmoe/12345的网址(这是照片的用户和照片ID)。

显然我可以创建一条新路线,但希望确保没有更多的REST方式来实现它。

1 个答案:

答案 0 :(得分:2)

你可以让照片成为用户的子资源,所以你有users/joeschmoe/photos/12345(当然,你的用户控制器需要能够接受用户名而不是id,这是另一个路由问题解决但并非困难)

resources :users do
  resources :photos
end

然后你的控制器可以打电话

@photos = Photo.find_by_username(params[:id])

虽然我认为这样做的方式较少。

您还可以将joeschmoe添加为查询字符串参数。

或者您可以在路由中将用户名设置为可选参数,因此它类似于

match "/photos(/:username)/:id" => "photos#show"

或者如果你想要一个新的命名路线:

match "/photos/:username/:id" => "photos#show_by_user", :as => :user_photo
相关问题