ruby-on-rails - rails 路由。单一资源

标签 ruby-on-rails

我遇到了 Rails 路由问题。我想将单一资源与用户 Controller 一起使用,但它无法按我的预期工作。这是我的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 paths”命令输出是:

     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) 前端/用户#authenticate

有趣的是,当我在用户 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

...它有效!

但是用户 Controller 中未定义索引操作! “rake paths”命令为 GET/user 返回双行

          GET    /user(.:format)          frontend/user#show
          GET    /user(.:format)          frontend/user#index

所以我认为这不是解决方案。分配给“/users”URL 的其他操作不起作用。

是否有必要为索引操作定义路由,例如

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

我做错了什么?

最佳答案

在路由中定义单一资源不会根据设计生成指向索引操作的路由。单一资源意味着您总是要在不指定 ID 的情况下查找该资源,因此获取单一资源的索引没有逻辑意义。因此,对 url“/user”的 GET 将路由到该单一资源的显示操作,而不是索引。

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

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". 

app/controllers/frontend/users_controller.rb

 module Frontend
   class UsersController < ApplicationController
     def show
       raise "in frontend/show"
     end
   end
 end

关于ruby-on-rails - rails 路由。单一资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12044275/

相关文章:

android - 如何通过android从rails读取base64编码的图片

ruby-on-rails - 带有label_tag的check_box_tag点击操作

ruby-on-rails - Heroku 生产数据库分区——可能吗?

ruby-on-rails - 抑制 Rspec 3 的回溯

mysql - 连接表查询慢

ruby-on-rails - 获取 fields_for 和 accepts_nested_attributes_for 以处理 belongs_to 关系

ruby-on-rails - 对于 Ruby 1.9.3 和 Rails 3.2,Puma 是否比 Unicorn 更好?

ruby-on-rails - RoR 载波 : Add remote files with multiple upload

ruby-on-rails - 如何提交带有刺激远程 true 的 simple_form

ruby-on-rails - Form_for 强制用户输入日期格式