Как заставить фильтр Rails анализировать строку JSON отдельно от сериализованных параметров? - PullRequest
1 голос
/ 03 декабря 2011

Мой JavaScript сериализует поля просмотра и добавляет массив путевых точек для публикации данных, в контроллере каждый параметр отдельно добавляет к геообъекту встречает параметр путевой точки и анализирует массив. Можно ли сделать фильтр, который бы получал эти параметры и анализировал их, чтобы я мог использовать обычный подход? Теперь в обычном подходе это Geo.new (params [: geo]) rails возвращает (поле было определено как (n) Array, но получил String со значением "[\" Paris, France \ ", \" Stuttgart, Deutschland \ "]".).

Контроллер:

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 Ответ

1 голос
/ 03 декабря 2011

Ну, а вы не могли бы поменять waypoints_temp_field на пост, отличный от geo? Например:

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])

Таким образом, вы можете обрабатывать путевые точки отдельно от всего остального.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...