根据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