我遇到了Rails路由问题。我想使用奇异的资源与用户控制器,但它不能像我预期的那样工作。这是我的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 /authenticate(.:format)frontend / user#authenticate
有趣的是,当我在用户控制器中添加索引操作的路由时,如下所示:
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"
我做错了什么?
答案 0 :(得分:3)
在路线中定义单一资源不会产生指向设计的索引操作的路径。单一资源意味着您总是要在不指定ID的情况下查找此资源,因此获取单个资源的索引只是没有逻辑意义。因此,对您的URL“/ user”的GET将路由到该单一资源的show动作而不是索引。
编辑:由于你的问题不明显,我会简化你的路线,直到你至少可以击中你期望的控制器然后从那里建造。
<强>配置/ 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".
应用/控制器/前端/ users_controller.rb 强>
module Frontend
class UsersController < ApplicationController
def show
raise "in frontend/show"
end
end
end
答案 1 :(得分:0)
非常感谢您的帮助!我发现了这个错误。
路由错误是由布局html文件的以下行引起的
<%= auto_discovery_link_tag(:rss, {:action => "index"}, {:title => "RSS"}) %>
我在erb视图文件中寻找错误,但我忘记了布局。 我必须记得在这种情况下检查整个视图层。