行动指数&#39;无法找到<x>控制器

时间:2015-05-30 20:08:00

标签: ruby-on-rails ruby routes ruby-on-rails-4.1

所以我刚刚使用控制器login_controller.rb创建了我的rails 4.1.2项目并查看了login.html.erb。我已经编辑了routes.rb并在创建控制器后添加了另一条默认match路由:controller(/:action(/:id))', :via => :get

当我使用rails s运行我的服务器并打开localhost:3000/login时,它会给我这个错误:

The action 'index' could not be found for LoginController

我不知道为什么要寻找名为&#39; index&#39;的动作。如果我是对的,那么rails实际上没有实际指定一个的默认操作是&#39; index&#39;所以我试图更改我的网址并要求:

localhost:3000/login/login

这给了我这个错误:

No route matches [GET] "/login/login"

如何解决此问题?感谢。

这是我rake routes输出的内容:

Prefix Verb URI Pattern                             Controller#Action
       GET  /:controller(/:action:(/:id))(.:format) :controller#:action

3 个答案:

答案 0 :(得分:2)

假设您有模型User和控制器UsersController。在routes.rb文件中,根据控制器操作列出资源和路由到匹配。默认情况下,该资源包含:index, :show, :new, :edit, :create, :update, :destroy。您可以通过执行以下操作来指定您想要(或不)的内容:

# config/routes.rb

# blacklisting - these are not in your controller
resource :users, exclude: [:show, :destroy], via: [:get, :post]

# whitelisting - these are in your controller
resource :users, only: [:index], via: [:get, :post]

据我了解,视图的文件名(除非呈现或资产)对应于控制器操作。您的登录页面的视图是否为index.html.(erb|haml)?如果是这样,您应该将索引定义为def index; end。但是,我建议您添加将用户重定向到主页或登录页面的内容,具体取决于他们是否已登录。

从那里开始,当您定义方法login时,真正的魔法会在您的控制器中发生。在这里,检查传入参数并记录用户是否正确。可以认为这类似于#update行动。

与定义要包含在路线中的操作的方式类似,您可以制作自己的自定义操作。请注意:order of routes matter。我自己并不是100%这个概念,但这是我在你的案例中建议的:

#config/routes.rb

resource :login, only: [:index], via: [:get, :post]
match '/login/login' => 'login#login', via: [:get, :post]

您还可以使用match/login/index#login方法相关联。该视图仍将被称为index。只是因为它有一个路由,你不需要登录操作的视图 - 它只是解析参数,而索引会显示错误消息。

答案 1 :(得分:0)

这将为您提供所需的结果。本地主机:3000 /登录/注册。重新开始重新启动服务器。

应用程序/控制器/ login_contrtoller.rb

class LoginController < ApplicationController
  def login
  end
end

路由

get 'login/login'

/app/views/login/login.html.erb

<h1>Login#login</h1>
<p>Find me in app/views/login/login.html.erb</p>

答案 2 :(得分:0)

在LoginController上添加索引操作

def index
end