代码之家  ›  专栏  ›  技术社区  ›  VP.

使用rails 3执行rspec更新操作时出现问题

  •  3
  • VP.  · 技术社区  · 15 年前

    我面临rspec和控制器的问题

    put :update, :id => "1", :ntp => {:name=>'myservah'}
    

    我的控制器具有以下代码:

    def update
     if @ntp.update_attributes(params[:ntp])
      flash.now[:notice] = "Successfully updated ntp."
     else
      flash.now[:error] = ((errors_to_a(@ntp)*'.<br />')+'.')
     end
     render :partial => 'update'
    end
    

    我得到以下错误:

    失败/错误:put:update,:id=>“1”,:ntp=>{:name=>'myservah'} 在视图路径“#”中缺少{:handlers=>[:erb,:rjs,:builder,:rhtml,:rxml],:formats=>[:html],:locale=>[:en,:en]}的部分NTP/更新

    我的问题是:我应该明确地说我有哪个处理器吗?今天我的部分被命名为'_更新js.erb'.

    1 回复  |  直到 15 年前
        1
  •  13
  •   Simone Carletti    15 年前

    Rails从某些请求参数检测响应的格式,包括http接受请求头(智能猜测),以及 :format

    除非指定,否则Rails将请求格式默认为 :html .

    如您所见,您的请求默认为 这意味着Rails正在尝试渲染 _update.html.erb 模板。您可以应用一些更改来解决此问题:

    1. # emulate a js request
      put :update, :id => "1", :ntp => {:name=>'myservah'}, :format => :js
      

      如果操作旨在响应AJAX请求,请使用 xhr 方法

      # emulate an XHR request
      xhr :put, :update, :id => "1", :ntp => {:name=>'myservah'}, :format => :js
      
    2. render :partial => 'update'

      respond_to do |format|
        format.js  { render :partial => 'update' }
        format.any { head 406 }
      end