サインイン時にユーザーごとにボタンを配置Users list
する必要がある、があります。follow/unfollow
トピック/グループなどをフォローするために同じ方法を使用したい場所は他にもいくつかあります。したがって、これらのボタンが必要になるたびに追加のクエリを回避するために、関連付けを作成するのが最善だと思います。
私user_followings
のテーブル構造
| id | user_id | recipient_id |
| 1 | 1 | 2 |
| 2 | 3 | 2 |
| 3 | 10 | 3 |
したがって、ここではid=1のuserがuser=>2の後に続きます。
つまり、基本的にhas_many
、ユーザーは他の多くのユーザーをフォローしているため、関連付けタイプがあります。has_one
しかし、アソシエーションタイプを追加するというアイデアを思いつきました。この場合、追加の条件recipient_id=current_user.id
を設定して、レコードが1つだけ残り、次のステータスが表示されるようにします。
これを成功させると、追加のクエリやキャッシュなどを使用せずに、ビューをassociation
介して次のステータスを非常に簡単に確認できます。user.following.nil?
以前にCakePHPアプリでこれを作成したことがありますが、SQLクエリは次のようになります。
ON (`UserFollowing`.`recipient_id` = `User`.`id` AND `UserFollowing`.`user_id` = 1)
しかし、CakePHPはその場でリレーションをバインドできるので、セッションからcurrent_user.idをアソシエーション条件に直接追加しました。
current_user.id
条件を記述するためのモデルを入れることができないため、Railsではこれを行うことができません。
user.rb
has_one :following, :class_name => 'UserFollowing', :conditions => {:user_id => current_user.id}
メソッドNb。2
を使用してこれを解決できるかもしれませんが、関連付けを行っているのと同じテーブルから:through
結果を取得する例が見つかりません。users
メソッドNb。3
Rails 3デバイスのスコープを使用していますか?モデルではcurrent_userにアクセスできませんか?
わからない、どちらの方法が最適か...