所以我刚刚使用控制器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
我不知道为什么要寻找名为' index'的动作。如果我是对的,那么rails实际上没有实际指定一个的默认操作是' index'所以我试图更改我的网址并要求:
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
答案 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