Ruby On Rails で簡単なタスク マネージャーを実行するタスクが与えられました。私にとってはとても簡単ですが、1つの問題があります。すべてを「ajax化」する必要があり、データはJSONで渡す必要があります。
私が今これを行う方法。
index.html.erb について
これらのパラメーターを使用して簡単なフォームを作成しています。
<%= form_for(Task.new, remote: true, :html => {:'data-type' => 'json'}) do |f| %>
TasksController で:
class TasksController < ApplicationController
respond_to :json
def create
@project = Project.find(params[:task][:project_id])
if @task = @project.tasks.create!(name: params[:task][:name], description: params[:task][:description])
respond_with(@task)
else
flash[:error] = 'error'
end
index.htm.erb の内部には次のものがあります。
$(document).ready(function(){
$("#new_task").bind('ajax:success', function(evt, data, status, xhr){
var row = ('<tr id="task.id"><td>'+data.name+'</td>'+'<td>'+data.description+'</td>'+'<td>'+data.state+'</td>'+'<td><%= link_to "delete task", task_path(task.id), :method => "delete", remote:true, data: { confirm: "Are you sure?" } %></td></tr>');
$(row).insertAfter("#tasks_table tr:first");
slicer($("#total"));
slicer($("#active"));
}); });
$("#new_task").bind("ajax:beforeSend", function(event,xhr,status){
$(this)[0].reset();
});
そして、これがどのように機能するかについて説明したいと思います(私の個人的な考え)
remote: true を指定することで、控えめな Javascript、Rails 3 機能を介してサーバーの入力にデータを送信するようにフォームに指示しています。私の例では通常のハッシュを送信します。これは params[:task][:name] などですが、:html => {:'data-type' => 'json'}) を設定したため、JSON が返されることを期待しています) (これは正しい構文ですか?)。私の TasksController クラスには、respond_to :json があります。つまり、respond_with は、respond_with を実行しているオブジェクトに対して to_json を実行するのに十分なほどスマートであるため、データ型 json が指定されている場合、コントローラーはこれらの要求に json で応答します。
私はこれらすべての仮定で正しいですか?
問題は、js.erb と json.erb を使用できるかどうかです (はい?) json を返す必要がありますか?