Rails Singular Resources 未按预期工作



根据http://guides.rubyonrails.org/的单数资源,我通过此命令创建了帖子rails g scaffold post -singular但它创建了复数资源帖子。所以我把它改成了

  get 'post', to: 'posts#show'
  resource :post

根据指南,这应该显示帖子,但实际上它给出了错误,说Couldn't find Post without an ID

它还说我可以对单数路由(/post)和复数路由(/posts/45)使用相同的控制器,我该怎么做?

当访问指向显示的单一路线时,不会向您提供 ID,因此Post.find(params[:id])不起作用,并且会给您错误"找不到没有 ID 的帖子"。由于没有给你一个 ID 参数,你需要像Post.find(1)一样对 ID 进行硬编码,或者假设你有一个has_one发布或belongs_to帖子的用户,或者做类似 current_user.post 的操作。

如果要同时使用单数路由"/post"和复数路由"/posts/45",则需要在show操作中考虑这两种情况,因为两个路由都将指向相同的操作。您的节目操作将如下所示:

#app/controllers/posts_controller.rb
def show
  @post = params[:id] ? Post.find(params[:id]) : Post.find(45)
end

最新更新