如何在Rails POST CREATE控制器中一次创建多个记录?

时间:2014-10-01 03:30:04

标签: ruby-on-rails rest post

我目前有一些模型,如User,UserMovieList和UserMovieListItem。

用户可以创建他们喜欢的喜剧电影或喜欢的恐怖电影的列表。创建新列表后,让我们说“我最喜欢的恐怖电影”,然后他们可以在列表中添加条目。他们可能会添加“星期五13号”和“响铃号”,然后保存。

现在我将这2部电影中的2部电影添加到网络服务器中,以便将它们添加到UserMovieListItem。

我希望能够在1个POST中添加它们。

{
  "user_movie_list_item":
  {
    "title": "Friday the 13th"
  }     
}

我希望能够发送

{
  "user_movie_list_item":
  {
    "title": "Friday the 13th"
  },
  {
    "title": "The Ring"
  }  
}

1)这是JSON发送多个条目的正确格式吗?

2)我如何在我的控制器中执行此操作?

现在我有......

def create
    if authenticate_user
        user_movie_list = @current_user.user_movie_lists.find_by_id(params[:user_movie_list_id])
        user_movie_list_item = user_movie_list.user_movie_list_items.new(user_movie_list_item_params)
        if (user_movie_list_item.save!)
            respond_with :api, :v1, @current_user, user_movie_list, user_movie_list_item, location: nil, serializer: Api::V1::UserMovieListItemSerializer
        else
            render json: { error: "Could not create new User Movie List Item."}, status: :unprocessable_entity
        end         
    else
        render json: { error: "User is not signed in." }, status: :unauthorized
    end
end

如何制作,以便我可以一次添加多个记录?

1 个答案:

答案 0 :(得分:0)

在您的模型中,您可以覆盖这样的分配:

def user_movie_list=(list)
  list.each do | l |
     ml = user_movie_list_items.new
     ml.title = l.title

     ... # configure your list

     ml.save!
  end
end

JSON列表是:

{ "my_list": [{"title": "blah"}, {"title": "foo"}, ... ] }