Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将许多行插入联接表轨道_Ruby On Rails_Activerecord_Inner Join_Outer Join_Jointable - Fatal编程技术网

Ruby on rails 将许多行插入联接表轨道

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

我有两个主表和一个联接表。书籍、位置和书籍位置

当创建一本书时,它可以有许多位置,我正在尝试找到将许多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_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