最初の行では、 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で簡単に見つけられる場所でかなり文書化されています。