不推荐在模板名称中传递模板处理程序是啥意思。意思是?

Posted

技术标签:

【中文标题】不推荐在模板名称中传递模板处理程序是啥意思。意思是?【英文标题】:What does Passing a template handler in the template name is deprecated. mean?不推荐在模板名称中传递模板处理程序是什么意思。意思是? 【发布时间】:2013-10-09 09:07:51 【问题描述】:

我一直试图弄清楚这个错误消息的含义,但无法弄清楚。

这是完整的消息

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

什么是template handler,为什么它认为我在template name 中传递了它?什么模板?

编辑:

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

【问题讨论】:

发布您的控制器代码。 /api/v1/login 指向什么控制器? 编译器认为你正在注册一个 JS 框架模板的句柄。这个问题似乎在 rspec 中经常发生。我没有更好的答案,但请发布您的控制器代码。 刚刚添加了控制器代码。 【参考方案1】:

从控制器操作进行渲染时,您不再需要将文件格式或处理程序作为文件名的一部分传递。相反,你会这样做:

render 'api/v1/sessions/new', :formats => [:json], :handlers => [:jbuilder], status: 201

这为以多种格式呈现的操作提供了便利。例如,您可以简单地将一组接受的格式传递给render,而不是为每种格式呈现单独的模板:

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

将数组传递给:builders 允许您指定渲染时使用的模板构建器:

render 'api/v1/sessions/foo', :formats => [:json], :handlers => [:jbuilder]
#=> renders to foo.json.jbuilder

【讨论】:

很好的答案和解释!谢谢!

以上是关于不推荐在模板名称中传递模板处理程序是啥意思。意思是?的主要内容,如果未能解决你的问题,请参考以下文章

模板中的语法 #foo="myFoo" 是啥意思?

模板作为类名的后缀是啥意思?

c++模板是啥?帮我解释下,谢谢!

“内联”是啥意思?

电脑atl是啥意思

这个“<>”在模板类函数中是啥意思?