最初の行では、 ActiveRecordRelationが正常に返されています。 @alarmsTのオブジェクト
# Extracts those alarms that are ACTIVE and have something in common with the tittles
@alarmsT = Alarm.activated.where("keyword in (?)", [@header.title_es, @header.title_en, @header.title_en])
この時点で、追加の .where(...)を適用できます。 @alarmsT のメソッド、条件、またはスコープ ARel式をさらに構築し、結果を返します。
ただし、次にこの関係に対してフィルターを実行し、 @alarmsTを変換します。 Arrayのインスタンスに
# Extracts alarms when Header has at least the same categories as an alarm
@alarmsT = @alarmsT.select do |alarm|
@header.category_ids.all?{|c| alarm.category_ids.include? c }
end
Array 以降、ARel式を作成できなくなりました ARelの.where(...)について知りません メソッド、または任意のアラーム モデルのスコープまたは属性。これが、以下のコードで#undefinedメソッド'where'を取得している理由です。 エラー-.where()を呼び出しています Arrayのインスタンス上;存在しないメソッド。
@alarmsF = []
@header.events.each do |e|
@alarmsF = @alarmsF + @alarmsT.where("alarms.location LIKE ?", e.town)
end
これを修正するには、カテゴリIDでフィルタリングするための選択を行わず、代わりに結合を使用します。このような結合の構築(関連するテーブル/列に少なくとも値のサブセットが存在することを確認するため)は、GoogleやここStackOverflowで簡単に見つけられる場所でかなり文書化されています。