2011-12-03 11 views
1

JavaScriptはビューフィールドをシリアライズし、データをポストするためにウェイポイント配列を追加します。コントローラ内の各パラメータは別々にGeoオブジェクトに追加され、ウェイポイントパラメータに遭遇し、配列に解析されます。これらのパラメータを取得し、それを解析して通常の手法を使用できるようにするフィルタを実行できるかどうか今度は、Geo.new(params [:geo])の通常のアプローチでは、Fieldは配列として定義されていますが、値は "[\" Paris、France \ "、\" Stuttgart、ドイツ\"]"。)。Railsフィルタを使用してシリアル化されたパラメータとは別にJSON文字列を解析する方法

コントローラー:

def create 
    @geo = Geo.new 
    @geo.waypoints = JSON.parse params[:geo][:waypoints] if params[:geo][:waypoints].is_a? String 
    @geo.description = params[:geo][:description] 
    @geo.start = params[:geo][:start] 
    @geo.end = params[:geo][:end] 
    @geo.save 
    redirect_to geo_path(@geo), :notice => "Geo successfully submitted." 
end 

JS:

$('form').submit(function() { 
    var waypoints = ["Paris, France", "Stuttgart, Deutschland"] 
    var url = $(this).attr('action'); 
    var waypoints_temp_field = $('<input type="hidden" name="geo[waypoints]" />').val(JSON.stringify(waypoints)).appendTo(this); 
    var postdata = $(this).serialize(); 

    $.post(url, postdata, function (callback) { 
     // callback 
    }, "json"); 
    return false; 
}); 

答えて

1

さて、あなたはgeo以外の何かに投稿するwaypoints_temp_fieldを変更することができませんでしたか?

var waypoints_temp_field = $('<input type="hidden" name="waypoints" />') 
          .val(JSON.stringify(waypoints)).appendTo(this); 

は、その後、あなたのコントローラでは、あなたが持っている可能性があり:例えば

@geo = Geo.new(params[:geo]) 
@geo.waypoints = JSON.parse(params[:waypoints]) if params[:waypoints]) 

この方法は、あなたが他のすべてとは別にウェイポイントを処理することができます。

+1

ありがとうございました。そのような単純な解決策と私は多くの時間を失った。 – roza

関連する問題