2013-07-09 48 views
1

我有一个数组,其中包含一些在Javascript中动态生成的参数。填充一些字段并按提交后,我想要在DB中生成多个记录,其中包含来自表单字段+数据的数据,例如名称,数组[0];名称,数组[1];名称,数组[2]等。所以,我决定做以下几点: 在我看来(我用simpleform)Rails 3 - 使用javascript创建多个记录

<%= simple_form_for(@stop_time, :html => {:remote => true, :class => 'well form-horizontal'}) do |f| %> 
<%= f.input :stop_id %> 
<%= f.button :submit %> 

和脚本部分(我用固定值现在):

<script type="text/javascript"> 
$('#new_stop_time').submit(function(){ 
    $.ajax({ 
    beforeSend: function(xhr) { 
     xhr.setRequestHeader(
     'X-CSRF-Token', 
     $('meta[name="csrf-token"]').attr('content'))}, 
    url: "/stop_times.json", 
    type: "POST", 
    contentType: "application/json", 
    data: JSON.stringify([ 
     arrival_time:"04:40:00", 
     created_at:"2013-04-20T20:37:30Z", 
     departure_time:"04:40:00", 
     drop_off_type:0, 
     id:1881, 
     pickup_type:0, 
     shape_dist_traveled:null, 
     stop_headsign:null, 
     stop_id:84612, 
     stop_sequence:1, 
     trip_id:"ABCDE", 
     updated_at:"2013-04-20T20:37:30Z" 
    ] 
    ]}) 
    }); 
}); 

但在铬调试我看到2 POST请求正在发送(一/停止时间从形式和其他/stop_times.json wic h用代码422得到响应)。

不应该只是一个POST请求?我想让Javascript做POST而不是表单。 是否有任何其他(更明显)的方式来创建多个记录?

感谢,

多米尼克

感谢@UberNeet :)现在它的工作原理与一个记录。它传递给控制器​​并创建正确的记录。我可以创建整个数组以将其作为JSON传递,但不知道如何在控制器端处理它。我认为有需要一些循环,但我不知道该怎么params为build.I've添加以下内容:

@i = 0 
while @i< params.length-1 do 
    @stop_time = StopTime.new(params[@i][:stop_time]) 
    @i +=1 
end 

回答

1

的形式发布两次,因为你是标记形式:remote => true和添加自定义AJAX帖子。

当您将表单标记为:remote => true时,Rails unobstrusive JavaScript库会启动并向表单添加事件处理程序。 (更多信息@“在JavaScript中使用Javascript”[http://edgeguides.rubyonrails.org/working_with_javascript_in_rails.html]请注意,这是针对Rails 4的)

不要将表格标记为:remote => true,并且您的内部ajax的自定义函数,请确保您为提交返回false。

$('#new_stop_time').submit(function() { 
    $.ajax({ ... }); 
    return false; 
}); 

返回false将取消常规表单提交。

如果要使用AJAX创建多个记录,则需要在Ajax方法中传递项目数组,并且控制器操作还必须支持处理该数据。把你的Rails动作想象成一个API。

相关问题