這裡是整本書最難的部分,拆成三個部分。
關係模型的實現:
這裡的難點在於如何實現使用者之間相互關注的資料模型,當乙個使用者a關注b或者取消關注b時發生了什麼? 發生的是relation的建立與銷毀。
因此這裡的關係模型用relationship來實現,裡面兩項,followed_id和follower_id 分別表示被關注的id和關注者的id。
user與relationship是一對多的關係,不過這裡的一對多有兩個,乙個是對應多個followed_id,另乙個是對應多個follower_id,所以user有兩個外來鍵,分別是followed_id,follower_id。
同樣,relationship也以兩種方式從屬於user,乙個是following(也就是前面的followed),乙個是folower,這兩個都是user,但是取了別名。這兩者均以user的id為外來鍵。
對relationship本身也要建立索引。
貼出相應的**如下:
user模型中如下:
[ruby]view plain
copy
print?
"code"relationship模型中的**如下:class="ruby">has_many :relationships, foreign_key: "follower_id", dependent: :destroy
has_many :followed_users, through: :relationships, source: :followed
has_many :reverse_relationships, foreign_key: "followed_id",
class_name: "relationship",
dependent: :destroy
has_many :followers, through: :reverse_relationships,source: :follower
[ruby]view plain
copy
print?
class relationship
belongs_to :follower, class_name: "user"
belongs_to :followed, class_name: "user"
validates :follower_id, presence: true
validates :followed_id, presence: true
end
這裡需要注意的是reverse_relationships這張表,他實際上並不存在,因為relationships是個對稱的表,我把follower_id做主鍵,能夠查詢乙個使用者關注了那些人,反過來我把followed_id做主鍵,可以查詢該使用者有多少粉絲。
Rails學習筆記(二)
1 在啟動web伺服器時,可以通過加上 e選項,指定啟動時選用哪個環境 ruby script server e development test production 2 rails裡強調 慣例重用配置 從資料庫中的表,到控制器,到模型,再到檢視,命名是有關聯的!檔案的存放路徑也是有關聯的。我們在...
Rails學習筆記(四)
1 rails內建了很多驗證,在提交表單時,可以直接使用rails提供的驗證。rails中關於程度和資料庫的連線環節是在model裡的,在model裡使用validates x of可以完成常用的驗證。常用的有 1 validates presence of 用於驗證非空 輸入空格也算空 2 val...
Rails 架構學習筆記
rails給web應用的結構上強加了很多約束,而正是這些約束使得應用的開發變得很容易。也許是因為無規矩不成方圓,也許是因為規定好了道路是的開發者不用在選擇面前糾結和徘徊,也許是從框架上植入了最佳實踐,是的新手不那麼容易犯前人的錯誤。size medium color blue models,view...