2

我正在使用 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 请求?

4

1 回答 1

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。设置contentTypeapplication/json将“Content-Type:'application/json'”标头添加到您的 POST。这将提示 Rails 将您的 POST 解释为 JSON。

于 2013-01-23T07:57:10.487 回答