2013-07-09 77 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。

相關問題