【发布时间】: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