在 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
我有 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