1

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'
4

1 に答える 1

0

destroyアクションに構文エラーがあるようです。ブロックの が欠落しendていると思います。respond_to

于 2012-07-27T08:18:22.617 に答える