###前提・実現したいこと
他モデル同士のフォロー機能を実装したいです。
具体的なモデルはUserとShopです。
###発生している問題・エラーメッセージ
問題は中間テーブルのカラム名をいかようにすればわからない点です。
通常(ネット上で落ちている記事で)は、同一モデル(User)間の実装を想定しています。
ですので、テーブル名をRelationshipとすると、カラムにfollower_idとfollowed_idを置きます。そして、modelでは、followerやfollowedクラスをrailsが認識できないので、class_name:"User"をbelongs_to:に添えて、明示します。
しかし、他モデル間での場合、明示するclassは2つありますので上記手法をとれません。
(class_name:"User", class_name:"Shop"の並列はできません。。。よね?)
そこで、「カラム名をuser_idとshop_idにすればclassを明示する必要なくね?」と思いました。
しかし、ここでもまた壁にぶち当たる気がします。(正確には頭の中のイメージで。)
例えば、Associationshipという中間テーブルがあったとします。
内在するカラムは、user_idとshop_idです。
フォロー機能の場合、user_idにはshopをフォローするuserのidとフォローされるuserのidを格納しなければなりません。この構造は成り立ちますか?
私はこの手法は成り立たないと考えてしまいました。
理由は、idの用途が違うからです。
用途とは、仕訳です。
単一モデル間のフォロー機能の場合は機能別で仕訳されますが、
他モデル間の場合はクラス名で仕訳されます。
例えば、
通常の単一モデル間のidの行先は
フォローする場合→follower_idへ
フォローされる場合→followed_idへ
という構造になるが、
他モデル間のidの行先は
Userがフォローする、される場合→user_idへ
Shopがフォローする、される場合→shop_idへ
といった具合にです。
恐縮ですが、、、
今、こうして書いていてもしかしたらできるのかも。。。
という考えも出てきました。
聞きたいことまとめます。
①他モデル間のフォロー機能を実装する場合、カラム名のidはクラス名_idにしても実装できるか。
②①ができなければ、ほかにどんな方法があるのか。
おそらく、私が今投げた疑問は
関連づけの根本的な理解が足りないことによって起こっています。
お手数ですが、
ご助力お願いします!!!!
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/19 04:10