Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails单一资源未按预期工作_Ruby On Rails - Fatal编程技术网

Ruby on rails Rails单一资源未按预期工作

Ruby on rails Rails单一资源未按预期工作,ruby-on-rails,Ruby On Rails,根据http://guides.rubyonrails.org/我通过这个命令创建了postrailsgscaffoldpost-singular但是它创建了多个资源post。所以我把它改成了 get 'post', to: 'posts#show' resource :post 根据指南,这应该显示帖子,但实际上它给出了一个错误,即在没有ID的情况下找不到帖子 它还说我可以使用同一个控制器来处理单数路由(/post)和复数路由(/posts/45),我如何才能做到这一点?当访问指向

根据
http://guides.rubyonrails.org/
我通过这个命令创建了post
railsgscaffoldpost-singular
但是它创建了多个资源post。所以我把它改成了

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

  resource :post
根据指南,这应该显示帖子,但实际上它给出了一个错误,即
在没有ID的情况下找不到帖子


它还说我可以使用同一个控制器来处理单数路由(/post)和复数路由(/posts/45),我如何才能做到这一点?

当访问指向显示的单数路由时,您没有提供ID,因此
post.find(params[:ID])
将不起作用,并将给您一个错误“没有ID无法找到post”。由于没有为您提供ID参数,您需要对ID进行硬编码,例如
Post.find(1)
,或者执行类似
current\u user.Post的操作,假设您有一个用户拥有一个Post或属于某个Post

如果要同时使用单数路由“/post”和复数路由“/posts/45”,则需要在show action中说明这两种情况,因为两个路由都指向同一个操作。您的表演动作如下所示:

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

除非你真的必须这样做,否则不要打破惯例。它最终会咬你的。