带有Rails的AJAX – 缺少模板
我正在尝试让AJAX在我的应用程序上工作,并得到一个奇怪的ActionView::MissingTemplate
错误。 我有这个作为我的tasks#create
方法:
def create @task = Task.new(task_params) @task.user_id = current_user.id if @task.save respond_to do |format| format.js format.html end # redirect_to tasks_path, notice: 'Task was successfully created.' else render :new end end
这是我的views/tasks/create.js.erb
:
$("#onetime-todo").html("") $("#onetime-done").html("") $("#daily-todo").html("") $("#daily-done").html("") $("#weekly-todo").html("") $("#weekly-done").html("") $("#monthly-todo").html("") $("#monthly-done").html("")
这在我的tasks/index.html.erb
:
.... One-Time Tasks
Daily
Weekly
Montly
谁能看到我哪里出错了? 这似乎是一个奇怪的错误,因为我有一个创建模板。 我的服务器日志显示如下:
Started POST "/tasks" for ::1 at 2017-08-13 21:48:44 -0700 Processing by TasksController#create as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"guwmQBf1AmKhxvi1coysoegbkKhy6Znk/oMKEar4TXcZ1OieTqiyRnf3m3MR/XHBrOsJ1d7ncZp8pzqAxC93tQ==", "task"=>{"name"=>"Testing oh testing", "frequency"=>"OneTime"}, "commit"=>"Create Task"} User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT 1 [["id", 1]] (0.1ms) begin transaction SQL (0.5ms) INSERT INTO "tasks" ("name", "frequency", "user_id", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?) [["name", "Testing oh testing"], ["frequency", "OneTime"], ["user_id", 1], ["created_at", "2017-08-14 04:48:44.237114"], ["updated_at", "2017-08-14 04:48:44.237114"]] (2.0ms) commit transaction Completed 500 Internal Server Error in 13ms (ActiveRecord: 2.6ms) ActionView::MissingTemplate - Missing template tasks/create, application/create with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee]}. Searched in: * "/Users/lizbayardelle/Dropbox/Code/FAM/app/views" * "/Users/lizbayardelle/.rvm/gems/ruby-2.3.3/gems/ckeditor-4.2.2/app/views" * "/Users/lizbayardelle/.rvm/gems/ruby-2.3.3/gems/devise-4.2.0/app/views"
而且我的routes.rb
很简单,如果它有帮助:
资源:任务
有人可以帮忙吗?
附加信息
根据要求,这是我的tasks#index
方法:
def index @create_task = Task.new @tasks = Task.all @one_time = Task.where(frequency: "OneTime", completed: false, user_id: current_user.id) @one_time_done = Task.where(frequency: "OneTime", completed: true, user_id: current_user.id) @daily = Task.where(frequency: "Daily", completed: false, user_id: current_user.id) @daily_done = Task.where(frequency: "Daily", completed: true, user_id: current_user.id) @weekly = Task.where(frequency: "Weekly", completed: false, user_id: current_user.id) @weekly_done = Task.where(frequency: "Weekly", completed: true, user_id: current_user.id) @monthly = Task.where(frequency: "Monthly", completed: false, user_id: current_user.id) @monthly_done = Task.where(frequency: "Monthly", completed: true, user_id: current_user.id) end
我正在尝试让AJAX在我的应用程序上工作,并得到一个奇怪的
ActionView::MissingTemplate
错误。
请求是以HTML格式进行的 ,即提交button
的remote: true
不起作用,请尝试在form
标记中设置它,如下所示:
<%= simple_form_for(@create_task), remote: true do |f| %>
我在服务器中收到此错误:
28ms完成500内部服务器错误(ActiveRecord:1.3ms)NoMethodError – 每个’未定义的方法’为nil:NilClass:app / views / tasks / _items.html.erb:2:in _app_views_tasks__items_html_erb__1746796241772610323_702981 03116960′
问题是create.js.erb中所需的所有变量都没有在create
action中设置,它们只在index
设置。 所以你需要在create中创建所有这些变量,但你可以避免使用before_action
回调重复,如下所示:
class TasksController < ApplicationController before_action :set_variables, only: [:index, :create] def index end def create @task = Task.new(task_params) @task.user_id = current_user.id if @task.save respond_to do |format| format.js format.html end # redirect_to tasks_path, notice: 'Task was successfully created.' else render :new end end # other actions private def set_variables @create_task = Task.new @tasks = Task.all @one_time = Task.where(frequency: "OneTime", completed: false, user_id: current_user.id) @one_time_done = Task.where(frequency: "OneTime", completed: true, user_id: current_user.id) @daily = Task.where(frequency: "Daily", completed: false, user_id: current_user.id) @daily_done = Task.where(frequency: "Daily", completed: true, user_id: current_user.id) @weekly = Task.where(frequency: "Weekly", completed: false, user_id: current_user.id) @weekly_done = Task.where(frequency: "Weekly", completed: true, user_id: current_user.id) @monthly = Task.where(frequency: "Monthly", completed: false, user_id: current_user.id) @monthly_done = Task.where(frequency: "Monthly", completed: true, user_id: current_user.id) end end