下記のチュートリアルで質問があります。
第11章 ユーザーをフォローする | Rails チュートリアル
Twitterのようなフォロー、フォロワーの関係をusers, relationshipsの2つのテーブルで表すというものです。
ruby
1#schema.rb 2ActiveRecord::Schema.define(version: 20130315230445) do 3 create_table "relationships", force: true do |t| 4 t.integer "follower_id" 5 t.integer "followed_id" 6 t.datetime "created_at" 7 t.datetime "updated_at" 8 end 9 10 add_index "relationships", ["followed_id"], name: "index_relationships_on_followed_id" 11 add_index "relationships", ["follower_id", "followed_id"], name: "index_relationships_on_follower_id_and_followed_id", unique: true 12 add_index "relationships", ["follower_id"], name: "index_relationships_on_follower_id" 13 14 create_table "users", force: true do |t| 15 t.string "name" 16 t.string "email" 17 t.datetime "created_at" 18 t.datetime "updated_at" 19 t.string "password_digest" 20 t.string "remember_token" 21 t.boolean "admin" 22 end 23 24 add_index "users", ["email"], name: "index_users_on_email", unique: true 25 add_index "users", ["remember_token"], name: "index_users_on_remember_token" 26 27end
ruby
1#user.rb 2class User < ActiveRecord::Base 3 has_many :relationships, foreign_key: "follower_id", dependent: :destroy 4 has_many :followed_users, through: :relationships, source: :followed 5 has_many :reverse_relationships, foreign_key: "followed_id", 6 class_name: "Relationship", 7 dependent: :destroy 8 has_many :followers, through: :reverse_relationships, source: :follower
ruby
1#relationship.rb 2class Relationship < ActiveRecord::Base 3 belongs_to :follower, class_name: "User" 4 belongs_to :followed, class_name: "User" 5 validates :follower_id, presence: true 6 validates :followed_id, presence: true 7end
質問1
has_many :followed_users, through: :relationships, source: :followed
のthrough
でrelationshipsテーブルを指定しています。このためにhas_many :relationships, ~
が必要なのでしょうか?relationshipsというテーブルは実在するため必要ないのではと思いました。
質問2
has_many :followed_users, through: :relationships, source: :followed
はrelationshipモデルに定義したfollowedプロパティをUserモデルでfollowed_usersというプロパティでアクセス可能にするという認識で合っていますでしょうか?
質問3
has_many :reverse_relationships,~
では実在しないテーブルを指定しています。これは架空にreverse_relationships
というテーブルを作りだしています。DBに例えるとViewのようなものだと思っています。has_many
やbelongs_to
はテーブルを指定するというよりは、Viewを定義するということに近いのでしょうか?
ご回答、よろしくお願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/09/29 21:32