我用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
endajax调用如下所示:
$.ajax({
url: '<%= url_for(:controller => "courses", :action => "activate_lesson") %>',
data: {"id": <%= lesson.id%>, "active": 0}
})
.done(function () {
saved();
})
.fail(function () {
notsaved();
})如何解决错误?
发布于 2015-07-16 13:00:58
您需要从控制器呈现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发布于 2015-07-16 12:59:58
当您在控制器内使用动作时,如果您没有说明它应该呈现给它搜索的特定模板。
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
endhttps://stackoverflow.com/questions/31454758
复制相似问题