在 Join Table Rails 中插入多行

Insert many rows into Join Table Rails

我有 2 个主表和一个连接 table。书籍、位置和 BookLocations。

创建一本书时它可以有很多位置,我试图找到将许多 locations.id 插入连接 table.

的最佳方法
def create
  @book = Book.new(book_params)

  if @book.save
   render json: @book, status: :created, location: @book
  else
   render json: @book.errors, status: :unprocessable_entity
  end
end

假设这是我传递给 /books 的参数

 {
  name: "NewBook",
  locations: ["New York", "Boston", "Toronto"]
 }

要获取位置 ID 以插入连接 table,我是否必须查询位置 table 并匹配名称,然后将 ID 单独插入连接 table?

这一切应该在循环中完成还是有更好的方法?

非常感谢任何建议谢谢。

首先,我建议您为位置名称添加一个索引,以防您还没有索引。

您需要查询位置,但不必一一查询。你可以这样做:

locations = Location.where(name: params[:locations])

或者更好的是,如果您可以更改要传递的参数以传递位置 ID:

locations = Location.find(params[:locations])

然后你可以做:

@book.locations << locations

您可以通过以下方式尝试

@book.locations.create(params[:locations].inject([]){|s,p| s << {name: p}})

实际上就是下面的那个

  @book.locations.create([{name: "New York"},{name: "Boston"},{name: "Toronto"}])

或者你可以

  @locations = Location.where(name: params[:location])

  @book.locations << @locations