2020年2月18日 星期二

Model中資料關聯的多對多方法/加入社團

https://railsbook.tw/chapters/18-model-relationship.html >>講得很清楚。
https://ihower.tw/rails/activerecord.html
這個Join table筆者的命名習慣會是ship結尾。

加入社團功能

多對多關係

user,group,group_relationship
app/models/user.rb
+  has_many :group_relationships
+  has_many :participated_groups, through: :group_relationships, source: :group

app/models/group.rb
+  has_many :group_relationships
+  has_many :members, through: :group_relationships, source: :user

app/models/group_relationship.rb
+  belongs_to :group
+  belongs_to :user

檢查是否有加入群組

app/models/user.rb
檢查是否有加入群組
+    def is_member_of?(group)
+      participated_groups.include?(group)
+    end

rails c 
u = User.first
g = Group.first
u.is_member_of?(g)
加入群組功能
  def join!(group)
    participated_groups << group
  end
退出群組功能
  def quit!(group)
    participated_groups.delete(group)
  end

HABTM(has_and_belongs_to_many)

這個很猛,不需要另外創資料表。如果你有需要使用這個第三方模型(例如你想知道這筆商品是在什麼時間店放入到商店裡)就不適合了。

傳統的的has_many :products, through: :ware_houses可以加些東西在資料庫裡面。created_at或是updated_at或是scope功能等,尤其scope功能最重要。+>但這個功能我捨棄掉不用,因為還在學習:D

沒有留言:

張貼留言

cloud9上面開發rails

 使用IAM身分登入,以免有資安問題。(用admin帳號登入,創建iam使用者,然後在上面的連結登入) 選擇 ubuntu18.04 減少查詢成本。 已經是超級使用者了,sudo 什麼都不需要輸入密碼了。 $ ruby -v  檢查 ruby使用的版本>>2.6.3,...