使用单个ActiveRecord对象追加ActiveRecord :: Relation对象

时间:2017-06-05 14:03:52

标签: ruby-on-rails ruby activerecord ruby-on-rails-5

我需要将一个ActiveRecord对象附加到已加载的ActiveRecord :: Relation。

E.g:

class BooksController < ApplicationController
  def index
    @books = Book.where(author: User.find(params[:user_id]))
    @books << Book.find_by_name("One More Book")
  end
end

如上所示,我尝试了ActiveRecord's << method,但它返回错误:

NoMethodError: undefined method `<<' for #<Book::ActiveRecord_Relation:0x007f9fbdc6db80>

这样做有一种优雅的方法吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

由于这是rails 5,您可以使用or方法

Books.where(author: User.find(params[:user_id])).or.where(name: "One More Book")

答案 1 :(得分:1)

Books.where(author_id: params[:user_id])).or.where(name: "wonderful name")

如果关系定义明确,这也应该起作用:

Books.where(author: params[:user_id])).or.where(name: "wonderful name")

答案 2 :(得分:0)

作为临时修复,我已完成以下操作:

books = Book.where(author: User.find(params[:user_id])).pluck(:id)
books << Book.find_by_name("One More Book").id
@books = Book.where(id: books)

由于显而易见的原因,这种解决方案远非理想,但它可以找到更好的解决方案。