【问题标题】:Rails AJAX Missing Template Error with link_to DeleteRails AJAX 缺少链接到删除的模板错误
【发布时间】:2017-08-14 20:11:05
【问题描述】:

我正在尝试对一个待办事项应用程序进行 AJAX 化处理,并且刚刚为我的 create 方法处理了这个问题(请参阅 [此处][1])。现在delete 方法正在起作用,但我不能使用以前的解决方案(将remote: true 从提交移动到form_for 行),因为删除是通过link_to 完成的。

这是我的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

还有我的tasks#destroy 操作:

  def destroy
    @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)

    if @task.destroy
        respond_to do |format|
          format.js
          format.html
      end
    else
      flash[:warning] = "Oops! Something went wrong!"
    end

  end
  [1]: https://stackoverflow.com/questions/45667684/ajax-with-rails-missing-template

这是我删除的link_to(来自部分):

   <%= link_to task_path(task), method: :delete, remote: true do %>
        <i class="icon ion-close-circled" id=(task.id + "task") style="margin-left: 5px"></i>
   <% end %>

像这样在tasks/index.html.erb 上渲染:

<div id="onetime-todo"><%= render partial: 'items', locals: { task: @one_time } %></div>

这是我的delete.js.erb

$("#onetime-todo").html("<%= escape_javascript(render partial: 'items', locals: { task: @one_time }) %>")
$("#onetime-done").html("<%= escape_javascript(render partial: 'done', locals: { task: @one_time_done }) %>")

$("#daily-todo").html("<%= escape_javascript(render partial: 'items', locals: { task: @daily }) %>")
$("#daily-done").html("<%= escape_javascript(render partial: 'done', locals: { task: @daily_done }) %>")

$("#weekly-todo").html("<%= escape_javascript(render partial: 'items', locals: { task: @weekly }) %>")
$("#weekly-done").html("<%= escape_javascript(render partial: 'done', locals: { task: @weekly_done }) %>")

$("#monthly-todo").html("<%= escape_javascript(render partial: 'items', locals: { task: @monthly }) %>")
$("#monthly-done").html("<%= escape_javascript(render partial: 'done', locals: { task: @monthly_done }) %>")

最后是我恼人的服务器日志:

Started DELETE "/tasks/1" for ::1 at 2017-08-14 12:59:40 -0700
Processing by TasksController#destroy as JS
  Parameters: {"id"=>"1"}
  Task Load (0.1ms)  SELECT  "tasks".* FROM "tasks" WHERE "tasks"."id" = ? LIMIT 1  [["id", 1]]
  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.4ms)  DELETE FROM "tasks" WHERE "tasks"."id" = ?  [["id", 1]]
   (0.6ms)  commit transaction
Completed 500 Internal Server Error in 15ms (ActiveRecord: 1.3ms)

ActionView::MissingTemplate - Missing template tasks/destroy, application/destroy with {:locale=>[:en], :formats=>[:js, :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"
:

困扰我的是,每个方法都会出现这个错误。删除确实发生了,它只需要刷新页面上就会出现。有人看到这里发生了什么吗?

【问题讨论】:

  • 也许您希望 delete.js.erb 成为 destroy.js.erb,因为操作是 destroy,而不是 delete
  • @jvillian,这很容易。白痴时刻。想写下答案,以便我可以选择它。
  • 没问题。发生在最好的情况下。

标签: jquery ruby-on-rails ajax


【解决方案1】:

您希望delete.js.erb 成为destroy.js.erb,因为操作是destroy,而不是delete

【讨论】:

    猜你喜欢
    • 2015-09-08
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多