Rails と ajax は初めてなので、簡単なアプリを作成して実験しています。ユーザーとタスクを使用して簡単に実行できるアプリを作成しました (ユーザーには多くのタスクがあります)。Devise を使用して認証を処理します。タスク CRUD を設定し、best_in_place (インプレース編集 gem) を実装して動作させました。私が次にやりたかったことは、100% ajax CRUD の作成などのリソースの例に従って ajax create と delete を追加することです。I'm getting DELETE http://localhost:3000/tasks/26 500 (Internal Server Error)
firebugコンソール ログに見られるように、tasks_controller で作成および破棄に必要なすべてのコードを設定した後。これらは、firebug のコンソールに表示されるエラーです。
DELETE http://localhost:3000/tasks/26 500 (Internal Server Error)
jQuery.ajaxTransport.send
jQuery.extend.ajax
$.rails.rails.ajax
$.rails.rails.handleRemote
(anonymous function)
jQuery.event.dispatch
jQuery.event.add.elemData.handle.eventHandle
破棄リンクがクリックされたとき、作成と同じです。更新後にタスクが削除されて作成されましたが、ajax が機能していません。何が問題なのかを把握するのにしばらく時間を費やしましたが、まだ運がありません。掘り下げている間、ここで助けが得られることを願っています. 以下は私のセットアップです:
最初のコントローラーコード:
def destroy
@task = current_user.tasks.find(params[:id])
@task.destroy
flash[:notice] = "Successfully destroyed post."
respond_to do |format|
format.html { }
format.js { }
end
end
def create
@task = current_user.tasks.build(params[:task])
respond_with(@task) do |format|
if @task.save
flash[:notice] = "Task was created successfully!"
respond_to do |format|
format.html { redirect_to tasks_url }
format.xml { render :xml => @task }
format.json { render :json => @task}
format.js
end
else
format.html { render :action => :new }
format.js
end
end
end
タスクリストの表示と削除を部分的に行うタスクリスト
<table>
<% @tasks.each do |task| %>
<tr>
<td><%= best_in_place task, :detail %></td>
<!-- <p><%= best_in_place task, :completed, type: :checkbox %></p> -->
<td><%= link_to "Destroy", task, :confirm => 'Are you sure?', :method => :delete, :remote => true, :id=>'delete' %></td>
</tr>
<% end %>
</table>
作成フォーム (他のビュー要素なし):
true) |f| を行う %><%= f.label :detail %>
<%= f.text_field :detail %> <%= f.submit %> <% end %>
これは、application.html.erb の JavaScript タグです (jquery.js、jquery.ujs、application.js、およびその他のあまり関係のない js ファイルを含めます):
最後に、destroy.js.erb 内で create.js.erb を使用してアラートを呼び出そうとしています。
alert("Task was deleted");
繰り返しますが、crud は更新時に正常に動作しています。destroy.js.erb と create.js.erb が何らかの形でリンクされていないように感じます。少しでもヒントになれば幸いです。
削除を押した後のコンソールからのエラーは次のとおりです。
ActionView::Template::Error (You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each):
1:
2: <table>
3: <% @tasks.each do |task| %>
4:
5: <tr>
6: <td><%= best_in_place task, :detail %></td>
app/views/tasks/_tasks.html.erb:3:in `_app_views_tasks__tasks_html_erb___1747031968745406293_70257861453000'
app/views/tasks/destroy.js.erb:4:in `_app_views_tasks_destroy_js_erb___3673072470672404292_70257861472560'