sql >> データベース >  >> RDS >> PostgreSQL

Rails 3.2-#

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



    1. ORA-06502:PL / SQL:数値または値のエラー:文字stringバッファが小さすぎます

    2. MySql単一テーブル、過去7日間を選択し、空の行を含める

    3. PostgreSQLDBの現在の接続数を取得するための正しいクエリ

    4. 接続プールからの接続の取得/作成に失敗しました