我的任务是在 Ruby On Rails 上做一个简单的任务管理器。这对我来说很简单,但有一个问题。一切都必须“ajaxified”,并且数据应该以 JSON 格式传递。
我现在如何做到这一点。
在 index.html.erb 上
我正在使用这些参数创建一个简单的表单:
<%= form_for(Task.new, remote: true, :html => {:'data-type' => 'json'}) do |f| %>
在任务控制器中:
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();
});
现在我想解释一下这可能如何工作(我个人的想法)
通过指定远程:真的,我告诉表单通过不显眼的 Javascript,rails 3 功能在服务器上的输入中提交数据。它在我的示例中发送一个通常的哈希值,即 params[:task][:name] 等,但它希望返回 JSON,因为我确实设置了 :html => {:'data-type' => 'json'}) (这是正确的语法吗?)。现在在我的TasksController 类中,我有respond_to :json,这意味着控制器将使用json 来回答那些指定了json 数据类型的请求,因为respond_with 足够聪明,可以对您正在执行respond_with 的对象执行to_json。
我对所有这些假设都正确吗?
所以问题是我们是否可以使用 js.erb 和 json.erb(是的?)你需要返回 json 吗?