2017-06-05 126 views
-1

我需要将一个ActiveRecord对象追加到加载的ActiveRecord :: Relation上。将ActiveRecord :: Relation对象追加到单个ActiveRecord对象中

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> 

是否有这样做的一个优雅的方式?

谢谢!

+1

为什么不在一个查询中使用'or'? – fanta

回答

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) 

由于显而易见的原因,这是解决方案远非理想,但它确实有效,同时可找到更好的解决方案。

1

由于这是轨道5可以使用or方法

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

感谢您的回复。这看起来不错,虽然我收到错误:'ArgumentError:传递给#or的关系必须在结构上兼容。不兼容的值:[:连接]'。有任何想法吗?再次感谢! – slehmann36

+0

书和作者之间的模型关联是什么?没有书,有外键author_id? –

相关问题