我一直在试图弄清楚这个错误信息是什么意思,但是不能弄清楚.
这是完整的信息
- DEPRECATION WARNING: Passing a template handler in the template name
- is deprecated. You can simply remove the handler name or pass render
- :handlers => [:jbuilder] instead. (called from realtime at
- /Users/Arel/.rvm/rubies/ruby-1.9.3-p385/lib/ruby/1.9.1/benchmark.rb:295)
这里是代码:
- it "is logged in" do
- post "/api/v1/login",user_login: {email: 'test@test.com',password: '12345678' }
- response.status.should be(201)
- end
什么是模板处理程序,为什么它认为我在模板名称中传递它?什么模板?
编辑:
Sessions_controller.控制器被登录路径调用.
- class Api::V1::SessionsController < Devise::SessionsController
- before_filter :authenticate_user!,except: [:create,:destroy]
- before_filter :ensure_params_exist
- skip_before_filter :verify_authenticity_token
- def create
- resource = User.find_for_database_authentication(email: params[:user_login][:email])
- return invalid_login_attempt unless resource
- if resource.valid_password?(params[:user_login][:password])
- sign_in("user",resource)
- resource.ensure_authentication_token!
- render 'api/v1/sessions/new.json.jbuilder',status: 201
- return
- end
- invalid_login_attempt
- end
- def destroy
- current_user.reset_authentication_token
- render json: {success: true}
- end
- protected
- def ensure_params_exist
- return unless params[:user_login].blank?
- render json: {success: false,message: "missing user_login parameter"},status: 422
- end
- def invalid_login_attempt
- render 'api/v1/sessions/invalid.json.jbuilder',status: 401
- end
- end
解决方法
当您从控制器执行渲染时,您不再需要将文件格式或处理程序作为文件名的一部分传递.相反,你会这样做:
- render 'api/v1/sessions/new',:formats => [:json],:handlers => [:jbuilder],status: 201
这提供了以多种格式呈现的动作的便利.例如,您可以简单地传递一系列接受的格式,而不是为每种格式呈现单独的模板:
- render 'api/v1/sessions/foo',:formats => [:html,:js,:xml]
- #=> handles html,js,and xml requests
- #=> renders to foo.html,foo.js,and foo.xml,respectively
将数组传递给:构建器允许您指定在呈现时使用的模板构建器:
- render 'api/v1/sessions/foo',:handlers => [:jbuilder]
- #=> renders to foo.json.jbuilder