我在控制器中使用以下内容,使用ajax将任务添加到项目模型中。
def task_add
project = Project.find(params[:project])
@task = ProjectTask.new(:description => params[:description])
project.project_tasks << @task
render :partial => 'task'
end
和我的ajax电话:
$('#task-add').click(function(){
var taskDesc = $('#task-description').val();
$.ajax({
type: "POST",
url: "/project_task_add",
data: ({project:<%= @project.id %>, description:taskDesc}),
success: function(data){
var data = $('<div/>').append(data);
$('#tasks').append($('#new-task', data).html());
}
});
});
在Firefox中运行正常,但Chrome会出现以下错误:
Failed to load resource: the server responded with a status of 500 (Internal Server Error)
深入挖掘chrome dev工具,我发现以下响应:
<h1>Template is missing</h1>
<p>Missing partial projects/task with {:locale=>[:en, :en], :formats=>[:js, :"*/*"], :handlers=>[:erb, :rjs, :rhtml, :builder, :rxml]} in view paths "/home/user/apps/my_app/app/views", "/usr/lib/ruby/gems/1.8/gems/devise-1.1.5/app/views"</p>
_task.html.erb部分存在于/ views / projects /下,Firefox渲染得很好。我不明白Chrome中有什么不同......有什么想法吗?
答案 0 :(得分:0)
这是期待您的部分被称为app/views/projects/task.js.erb
(由错误的formats
部分计算,而不是app/views/projects/task.html.erb
。您可能只有部分html
定义
答案 1 :(得分:0)
请求的方法是:js。 我认为rails试图渲染_task.js.rjs而不是_task.html.erb。 你可以明确它
render :partial => 'projects/task.html.erb'
但我认为你可以改变视图来生成请求,这样他们就没有params方法js或渲染ajax响应。
如果您需要更多帮助,请发布您的观点!