$ .AJAX用于在rails中创建多个记录

时间:2013-01-23 07:31:15

标签: ruby-on-rails ajax post

我正在使用Ruby on Rails,我有一个可以通过AJAX创建帖子的按钮,使用它:

$.ajax({
      beforeSend: function(xhr) {
        xhr.setRequestHeader(
            'X-CSRF-Token', 
            $('meta[name="csrf-token"]').attr('content'))},
      url: "/posts/",
      type: "POST",
      data: {
        post: {
          title: "Cheese",
          content: "Cake",
        }
      }
    });

如何格式化数据以一次创建多个帖子,例如

posts = [
{
    title: "Cheese",
    content: "Cake"
},
{
    title: "Key Lime",
    content: "Pie"
}
]

所以我可以用一个POST插入多个对象吗?

我有一个标题和内容列表。我可能需要用这些来构造一个JSON对象吗?

无论这是否是好的Rails练习,我该怎么做?另外,我在哪里可以查找如何格式化此类HTTP请求?

1 个答案:

答案 0 :(得分:3)

你的jQuery调用不会有太大变化:

$.ajax({
  beforeSend: function(xhr) {
    xhr.setRequestHeader(
        'X-CSRF-Token', 
        $('meta[name="csrf-token"]').attr('content'))},
  url: "/posts/",
  type: "POST",
  contentType: "application/json",
  data: JSON.stringify({
    posts: [
      {
        title: "Cheese",
        content: "Cake",
      },
      {
        title: "Key Lime",
        content: "Pie"
      }
    ]          
  })
});

在您的Rails操作中,您可以通过params[:posts]以哈希数组的形式访问您的帖子。

class ThingsController < ApplicationController
  def batch_create
    params[:posts].each do |post|
      Post.create post
    end
  end
end

<强>解释

使用JSON.stringify会将您的数据序列化为JSON。将contentType设置为application/json,将“Content-Type:'application / json'”标头添加到POST中。这将使Rails能够将您的POST解释为JSON。