Ruby on rails 将许多行插入联接表轨道
我有两个主表和一个联接表。书籍、位置和书籍位置 当创建一本书时,它可以有许多位置,我正在尝试找到将许多locations.id插入联接表的最佳方法Ruby on rails 将许多行插入联接表轨道,ruby-on-rails,activerecord,inner-join,outer-join,jointable,Ruby On Rails,Activerecord,Inner Join,Outer Join,Jointable,我有两个主表和一个联接表。书籍、位置和书籍位置 当创建一本书时,它可以有许多位置,我正在尝试找到将许多locations.id插入联接表的最佳方法 def create @book = Book.new(book_params) if @book.save render json: @book, status: :created, location: @book else render json: @book.errors, status: :unprocessable
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
说这是我要传递给/书籍的参数
{
name: "NewBook",
locations: ["New York", "Boston", "Toronto"]
}
要获取要插入到联接表中的位置Id,是否必须查询位置表并匹配名称,然后将Id分别插入联接表中
这一切应该在一个循环中完成,还是有更好的方法
非常感谢您的建议。首先,我建议您在位置名称中添加索引,以防您还没有索引 您必须查询位置,但不必逐个查询。您可以执行以下操作:
locations=Location.where(名称:params[:locations])
或者更好,如果您可以将要传递的参数更改为传递位置ID:
locations=Location.find(参数[:位置])
然后你可以做:
@book.locations您可以通过以下方式尝试
@book.locations.create(params[:locations].inject([]){|s,p| s << {name: p}})
或者你可以
@locations = Location.where(name: params[:location])
@book.locations << @locations
@locations=Location.where(名称:params[:Location])
@book.locations@book.locations.create([{name:“纽约”},{name:“波士顿”},{name:“多伦多”}]))
@locations = Location.where(name: params[:location])
@book.locations << @locations