Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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 如何使用用户名作为控制器的前缀?_Ruby On Rails_Ruby On Rails 3_Routing - Fatal编程技术网

Ruby on rails 如何使用用户名作为控制器的前缀?

Ruby on rails 如何使用用户名作为控制器的前缀?,ruby-on-rails,ruby-on-rails-3,routing,Ruby On Rails,Ruby On Rails 3,Routing,我对Rails 3中的新路由有一些问题。以用户名作为路径前缀的最佳方式是什么。现在我有以下代码: resources :links, :path => '/:username' do put 'star', :on => :member end 但它会让params空着 编辑: 我想要一个URL,如: /:username/links /:username/links/:id/star 我希望能够获取params[:username]您应该使用嵌套的资源 resource

我对Rails 3中的新路由有一些问题。以用户名作为路径前缀的最佳方式是什么。现在我有以下代码:

resources :links, :path => '/:username' do
  put 'star', :on => :member
end
但它会让params空着

编辑:

我想要一个URL,如:

/:username/links  
/:username/links/:id/star

我希望能够获取params[:username]

您应该使用嵌套的资源

resources :users do
  resources :links do
    put 'star', :on=>:member
  end
end
然后,如果在user.rb中实现to_param

def to_param
  username.parameterize
end
那你就有

/:username/links
/:username/links/23
/:username/links/23/star

您可以使用
scope
进行此操作,它更整洁:

 scope :path => ":username" do
   resources :links do
     put 'star', :on => :member
   end
 end

我想要/:username/链接,但这不给我:/users/:username/链接吗?是的,这给了他/users/:username。他希望它不带/users/前缀。这看起来很有希望,但当我试图获取params[:username]时,我得到了零。@magnushjelm:这实际上对我有用,我不知道为什么你的会是零:这很奇怪。当我在控制台中测试它时,它似乎可以工作。当我在浏览器中测试时,参数有时会显示为一个请求的延迟。我正在将一个应用程序从2.3.9升级到3.0.3,因此我的代码很可能在其他地方被破坏。