2016-10-03 4 views
0

は、どのように私はRailsのモデルインスタンスの配列にActiveRecord_AssociationRelationを変換することができますか?代わりに、インスタンスの配列を返す方法はありどのようにActiveRecordの中に配列にActiveRecord_AssociationRelationを変換するには?

class Like < ApplicationRecord 
    belongs_to :likee, class_name: 'User', foreign_key: 'likee_id' 
    belongs_to :liker, class_name: 'User', foreign_key: 'liker_id' 

    after_save :mutual_like? 

    private 

    def mutual_like? 
    if liker.likes.where(likee: liker) // returns collection proxy but I want to return an array of model instances so that I can create another model 

    end 
    end 
end 

私はこのようなafter_saveフックにあるコードがありますか?

参照表:

create_table "likes", force: :cascade do |t| 
    t.integer "liker_id",  null: false 
    t.integer "likee_id",  null: false 
    ... 
    end 

私はこの問題は、Railsがlikee_id/liker_idの外部キーに基づいてモデルを関連付けていないことであると信じています。

+0

liker.likes.where(likee:liker)があれば、この '' bool値を返し、それは私も 'liker.likesを保存した'収集proxy' –

+0

を返すことができません。ここで、(likee:liker) '変数にして、コレクションプロキシ – user3162553

+0

は、ARを得るために、いくつかのロード方法を使用しています:' liker.likes.where(likee:liker)は –

答えて

1

ActiveRecord#to_aを試してみてください。

liker.likes.where(likee: liker).to_a

to_a()public

Converts relation objects to Array.

+1

私はそれを試してみましたが、私は '取得のActiveRecord :: StatementInvalid:PG :: UndefinedColumn:ERROR:列likes.user_idあなたは[移動]を必要とする – user3162553

+0

をexist'しません(http://edgeguides.rubyonrails.org/active_record_migrations.html) 'liker_id'と' likee_id'のデータベース列を追加します。関連する回答:http://stackoverflow.com/questions/22815009/add-a-reference-column-migration-in-rails-4 – leland

+0

これらはすでにテーブルに載っています - 私は自分の答えを更新しました – user3162553

関連する問題