2017-06-05 10 views
-1

1つのActiveRecordオブジェクトを、ロードされたActiveRecord :: Relationに追加する必要があります。1つのActiveRecordオブジェクトでActiveRecord :: Relationオブジェクトを追加します。

例えば:

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

なぜ、1つのクエリで 'or'を使用しないのですか? – fanta

答えて

0

を使用することができ、レール5であるので、私は次のことを行っている:

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

これはあなたが一時的修正したようor方法

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

お返事ありがとうございます。これはうまく見えますが、私はエラーを受け取ります: 'ArgumentError:#に渡された関係または構造的に互換性がなければなりません。互換性のない値:[:joins] '。何か案は?再度、感謝します! – slehmann36

+0

本と著者のモデル関連は何ですか?本は、外部キーauthor_idを持っていますか? –

関連する問題