私は次のコードを持っています:
タスク/_form.html.haml
%h3
Tasks
%span.form-inline.centered
= form_for [@activity, @task], remote: true do |f|
= f.text_field :description, {placeholder: 'Enter task description and click + to create a new task', class: 'input-task'}
= f.submit "+", class: 'btn btn-danger'
controllers /tasks_controller.rb
def create
activity = Activity.find(params[:activity_id])
flash[:error] = I18n.t "errors.task.generic" if !activity.add_task!(params[:task])
@task = activity.tasks.last
respond_to do |format|
format.html { redirect_to activity_path(activity) }
format.js
end
end
タスク/create.js.erb
$('#incomplete-tasks').append("<%= j render partial: 'task', locals: {task: @task} %>");
タスク/_task.html.haml
%li
= task.description
= link_to "Done", activity_task_path(task.activity, task: task), html_options = {method: :put, class: 'pull-right'}
私が抱えている問題は、jsを使用してRESTfulリソースの一部をレンダリングしようとすると、activity_task_path
指定しているputメソッドの代わりにgetメソッドが送信されることです。jsを使用せずにレンダリングし、ブラウザを更新するだけで問題なく動作します。表示ページがないため、ルーティングエラーが発生します。ただし、必要ありません。putメソッドを介してタスクを更新するために必要です。なぜこれが起こっているのかを誰かが明らかにすることができれば、私はそれをいただければ幸いです。
[編集1]
ご不明な点がある場合や、コードなどを追加する必要がある場合は、お知らせください。なぜこれが起こっているのか本当にわかりません。ありがとうございました。
[編集2]
def update
activity = Activity.find(params[:id])
activity.update_task!(params[:task])
redirect_to activity_path(params[:id])
end
これは私のアップデートコントローラーです。
[編集3]
https://trackit.mlpinit.comでアプリをオンラインで見つけて、私がやろうとしていることをよりよく理解することができます。確認を2.daysに設定したランダムなメールアドレスで認証できます。
[編集4]
もっと明確にしたいと思っています...ajaxを介して新しいタスクを追加したときに発生するエラーは次のとおりです。
ルーティングエラー
ルートが一致しません
{:action=>"show", :controller=>"tasks", :task=>#<Task id: 64, description: "lalala", complete: false, created_at: "2012-10-11 19:41:22", updated_at: "2012-10-11 19:41:22", activity_id: 6>, :activity_id=>#<Activity id: 6, title: "Lala", description: "this is lala", created_at: "2012-10-10 18:37:18", updated_at: "2012-10-10 18:37:18", user_id: 2, activity_group_id: nil>}
もう一度、ajax呼び出しでこれを行わなければ、問題なく動作します。なんらかの理由でputメソッドがわからないので問題が発生しているのではないかと思います...
[編集5]
_taskパーシャルからリンクを取得すると、エラーなしで追加が行われます。私はそれを言及する必要があると思いました
[編集6]
自分自身を確実に理解できるように、視覚的なウォークスルーを追加します...
私はタスクフォームを持っています:
タスク名を入力します
プラスを押して作成します。
上記にも示されている次のエラーが発生します。
更新を押すと、タスクが生成されました。
そのため、.js.erbファイルに含める必要があると思います...