Ruby on rails 轨道路线。单一资源

Ruby on rails 轨道路线。单一资源,ruby-on-rails,Ruby On Rails,我遇到了铁路线路问题。我想使用用户控制器的单一资源,但它并不像我预期的那样工作。以下是my routes.rb文件的片段: scope :module => "frontend" do root :to => "home#index" resource :user, :controller => "user" get "/sign_up" => "user#new" get "/sign_in" => "user#sign_in" get "/s

我遇到了铁路线路问题。我想使用用户控制器的单一资源,但它并不像我预期的那样工作。以下是my routes.rb文件的片段:

scope :module => "frontend" do
  root :to => "home#index"
  resource :user, :controller => "user"
  get "/sign_up" => "user#new"
  get "/sign_in" => "user#sign_in"
  get "/sign_out" => "user#sign_out"
  post "/authenticate" => "user#authenticate"
  resources :articles
  resources :article_categories
end
我想当我使用例如“/user”或“/user/new”URL时,它会起作用,但它没有。我得到一个路由错误:

No route matches {:controller=>"frontend/user"}
“rake routes”命令输出为:

     user POST   /user(.:format)          frontend/user#create
 new_user GET    /user/new(.:format)      frontend/user#new
edit_user GET    /user/edit(.:format)     frontend/user#edit
          GET    /user(.:format)          frontend/user#show
          PUT    /user(.:format)          frontend/user#update
          DELETE /user(.:format)          frontend/user#destroy
  sign_up GET    /sign_up(.:format)       frontend/user#new
  sign_in GET    /sign_in(.:format)       frontend/user#sign_in
 sign_out GET    /sign_out(.:format)      frontend/user#sign_out
验证POST/验证(:格式)前端/用户#验证

有趣的是,当我在user controller中为索引操作添加路由时,如下所示:

scope :module => "frontend" do
  root :to => "home#index"
  resource :user, :controller => "user"
  get "/user" => "user#index"
  get "/sign_up" => "user#new"
  get "/sign_in" => "user#sign_in"
  get "/sign_out" => "user#sign_out"
  post "/authenticate" => "user#authenticate"
  resources :articles
  resources :article_categories
end
…它起作用了

但用户控制器中未定义索引操作! “rake routes”命令为GET/user返回双线

          GET    /user(.:format)          frontend/user#show
          GET    /user(.:format)          frontend/user#index
所以我想这不是解决办法。分配给“/users”URL的其他操作无效

是否需要为索引操作定义路由,如

get "/controller_name" => "controller_name#index"

我做错了什么?

在路由中定义一个单一的资源将不会按设计生成一个指向索引操作的路由。singular resource意味着您总是要在不指定ID的情况下查找此资源,因此对于singular resource的get-to索引在逻辑上是没有意义的。因此,访问url“/user”将路由到该单一资源的显示操作,而不是索引

编辑:由于您的问题并不明显,我会简化您的路线,直到您至少可以点击您期望的控制器,然后从那里构建

config/routes.rb

 scope :module=>"frontend" do
   resource :user
 end
 #ensure you don't have any other user routes listed before this that would match "/user". 
 module Frontend
   class UsersController < ApplicationController
     def show
       raise "in frontend/show"
     end
   end
 end
app/controllers/frontend/users\u controller.rb

 scope :module=>"frontend" do
   resource :user
 end
 #ensure you don't have any other user routes listed before this that would match "/user". 
 module Frontend
   class UsersController < ApplicationController
     def show
       raise "in frontend/show"
     end
   end
 end
模块前端
类UsersController
非常感谢您的帮助!我发现了窃听器

路由错误是由布局html文件的以下行引起的

<%= auto_discovery_link_tag(:rss, {:action => "index"}, {:title => "RSS"}) %>
“index”},{:title=>“RSS”}%>
我在erb视图文件中查找错误,但我忘记了布局。
在这种情况下,我必须记得检查整个视图层。

我不希望为索引操作设置路由。但是如果routes.rb中没有这一行:“get”/user“=>“user#index”,其他url-s将无法工作。当我使用例如'/user/new'URL:'时,我得到了路由错误,这就是问题所在。(我可能写了太多细节;P)