新手问题 求助,路由问题,一直提示:ActionNotFound

moliliang · 2014年01月07日 · 最后由 moliliang 回复于 2014年01月10日 · 2954 次阅读

新手,刚接触 rails。 路由器真很让我郁闷。。。

在 routes.rb

get "check" => "registrations#check"

添加路由。

然后

class RegistrationsController < Devise::RegistrationsController

类中有方法

def check
  ret = User.find_by_username(params[:user["email"]]);
  render  :text =>ret.to_json;
end

然后访问 http://localhost:3000/check

就一直提示:

AbstractController::ActionNotFound at /check
Could not find devise mapping for path "/check".
This may happen for two reasons:

1) You forgot to wrap your route inside the scope block. For example:

  devise_scope :user do
    get "/some/route" => "some_devise_controller"
  end

2) You are testing a Devise controller bypassing the router.
   If so, you can explicitly tell Devise which mapping to use:

   @request.env["devise.mapping"] = Devise.mappings[:user]

无法找到 action /check
———————————————— 谢谢。

提示说的很清楚,可以看下 devise 文档里关于“Configuring controllers”和“Configuring routes”小节的说明

#1 楼 @lululau 确实很清楚,但是。。不知道第二步在哪里写啊。。。

在 routes.rb 里面添加

devise_scope :user do
  get "check" => "registrations#check"
end

谢谢楼上的各位。

#3 楼 @yuh 很疑惑,为什么有时候又 是:user 有时候又是 :users ....?

#6 楼 @moliliang 这里的 :user 是个 namespace,:users 一般是在声明 resources 的时候用。你慢慢了解多了就不疑惑了。顺便说下,头像不错。

#7 楼 @chechaoyang 呵呵,头像是周星驰的 喜剧之王。

#8 楼 @moliliang 嗯,我很喜欢的一部电影。

#6 楼 @moliliang 看一下 devise_for 和 devise_scope 两个 action 的源代码就能了解个差不多,涉及到一些 mapping 关系,其实 devise_for 最终调用了 devise_scope.

需要 登录 后方可回复, 如果你还没有账号请 注册新账号