0

我想要的是能夠輕鬆地找到與成員關聯的團隊名稱,而無需向數據庫發送另一個請求。我的計劃是隻將一個team_name屬性添加到成員資格表中,但我想不出讓這個新屬性與團隊表中的name屬性保持同步的方法。換句話說,如果一個團隊的所有者改變了團隊的名字,那麼所有的團隊成員都會被更新(以新的團隊名稱),我希望這是一個例子。如何保持RoR中同步來自兩個不同表的屬性?

這是我的設置看起來像。我對Rails相當陌生。

/app/models/membership.rb

class Membership < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :team 
end 

/app/models/team.rb

class Membership < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :team 
end 

/app/db/schema.rb

ActiveRecord::Schema.define(version: 20161022002620) do 

    create_table "memberships", force: :cascade do |t| 
    t.integer "user_id" 
    t.integer "team_id" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 

    create_table "teams", force: :cascade do |t| 
    t.string "name" 
    t.integer "user_id" 
    end 
end 

如果有更好的方法來實現我所要求的,那麼請讓我知道。

回答

1

使用此關係數據,您的成員資格不需要團隊名稱屬性 - 它已通過團隊關聯可用。

通常沒有理由以這種方式保持數據「同步」,除非您正在執行某種計算。您不需要在Membership上存儲name屬性 - 您只能使用Team中的現有屬性。

我看到有人添加重複的數據庫列,因爲他們不知道如何遍歷關聯。但是,除非你使用了一些noSql系統,否則這不是「正確的方式」 - 有一個潛在的SQL API(通過ActiveRecord)可以非常有效地執行查找。


回覆您的評論。這樣做:

class Membership < ActiveRecord::Base 
    def name 
    team.name 
    end 
end 
+0

什麼我想能夠做的是一樣的東西: – Jesse

+0

我編輯的答案 –

+0

User.memberships.first.name,並將它返回的成員是與球隊的名字。 – Jesse

相關問題