【问题标题】:rails ActionView::MissingTemplate ajax functionrails ActionView::MissingTemplate ajax 函数
【发布时间】:2015-07-16 12:53:58
【问题描述】:

我使用 ajax 请求调用 Rails 控制器函数。它有效但我得到了一个错误:

ActionView::MissingTemplate

控制器功能是:

# Aktiviert einen Kurs. Diese Action wird von einem AJAX-Aufruf aus    aufgerufen
 def activate
    @course = Course.find params[:id]
    return false unless check_authorization @course
   @course.active = params[:active]
   @course.save

   redirect_to :back
end

ajax 调用如下所示:

$.ajax({
       url: '<%= url_for(:controller => "courses", :action => "activate_lesson") %>',
       data: {"id": <%= lesson.id%>, "active": 0}
                })
                        .done(function () {
                            saved();
                        })
                        .fail(function () {
                            notsaved();
                        })

我该如何解决这个错误?

【问题讨论】:

  • 为什么你在控制器中使用redirect_to :back
  • 我虽然可以帮助...但没有改变如果它存在与否
  • redirect_to :back 无济于事 render json: { data: 12} 将起作用.. 这是语法.. 将响应返回给 Ajax 调用者..

标签: jquery ruby-on-rails ajax ruby-on-rails-4


【解决方案1】:

当你在控制器中使用动作时,如果你没有说明它应该搜索什么特定的模板来渲染

app/views/controller_name_without_word_controller/action_name.html.*

在您的情况下,它正在搜索 app/views/controller_name/activate.html.* 来呈现它,但您没有该文件。

解决方法是返回json响应,因为你使用的是ajax,但是你可以返回html

你可以写:

 def activate
   @course = Course.find params[:id]
   return false unless check_authorization @course
   @course.active = params[:active]
   @course.save
   render json: @course # or whatever you want to return
end

【讨论】:

  • 谢谢,但我也遇到了同样的错误......没有任何改变
【解决方案2】:

你需要从你的控制器渲染json

before_filter :authorized?, :only => :activate

def activate
  @course.active = params[:active]
  if @course.save
    render :json => {:status => :ok}
  else
    render :json => {:errors => @course.errors}
  end
end

def authorized?
  @course = Course.find params[:id]
  render :json => {:status => 401, :error => :unauthorized} unless check_authorization(@course)
end

【讨论】:

  • 我也尝试过这个解决方案,但我也遇到了同样的错误
  • 啊!您正在调用activate_lesson 操作。和activate action 有区别吗?
  • 谢谢这就是我需要的提示^^我必须更新激活课程操作!
猜你喜欢
  • 1970-01-01
  • 2013-04-20
  • 1970-01-01
  • 2020-03-03
  • 2011-11-10
  • 1970-01-01
  • 2016-08-20
  • 1970-01-01
相关资源
最近更新 更多