基本上我有一个UsersInitializeController类
class UsersInitializeController < ApplicationController
before_filter :authenticate_user!
def create
render true
end
end
的authenticate_user!可在应用程序控制器中找到
class ApplicationController < ActionController::Base
# protect_from_forgery
def authenticate_user!
@current_user = User.find_by_token params[:auth_token]
if !@current_user
@current_user = User.create :token => params[:auth_token]
end
end
end
当我的应用程序启动时,它会向UsersInitializeController发送POST请求。由于设置了before_filter,因此它将调用authenticate_user!第一。但是我得到的错误是before_filter是一个未定义的方法。
据我所知,before_filter存在于ActionController中,并且自UsersInitializeContoller&lt; ApplicationController&lt; ActionController,我不应该得到这个错误。有没有人遇到过这个问题?
异常堆栈(根据要求)
Started POST "/users_initialize.json" for 127.0.0.1 at 2012-03-06 00:32:50 -0800
ActionController::RoutingError (undefined method `before_filter' for UsersInitializeController:Class):
app/controllers/users_initialize_controller.rb:3:in `<class:UsersInitializeController>'
app/controllers/users_initialize_controller.rb:1:in `<top (required)>'
Routes.rb文件(根据要求提供)
MyApplication::Application.routes.draw do
resources :users_initialize
match 'info/required_client_version' => 'info#required_client_version'
end
###问题已解决###
未使用的Devise Gem不知何故导致并发症。删除它并完成。
答案 0 :(得分:1)
在&#34;包含do&#34;中添加before_filter。块:
included do
before_filter :authenticate_user!
end
更新: 刚刚注意到你已经解决了但是我遇到了同样的麻烦,上面的解决方案解决了我的问题。所以,我会在这里留下评论,因为它可以帮助其他人
答案 1 :(得分:0)
无法重现,您发布的代码在我的Rails 3.2.2应用程序上运行正常。
您的源文件可能有问题(即某处有一些额外的隐藏字节)。
您可以尝试逐步解决此问题:
UsersController
并将resources :users
添加到routes.rb
使用以下代码添加index
操作:
def index
render :text => "Hello there"
end
当您访问http://localhost:3000
时,您会看到“Hello there”文字
before_filter
并通过添加例如来验证过滤器是否已执行logger.warn( 'In the Filter' )
到过滤方法的开头