2016-03-05 58 views
0

我可能會用這種錯誤的方式去解決,但在閱讀了關於關聯和範圍的各種SO文章和Rails文檔之後,我並不聰明。通過關係在has_many上加入實體的Rails字段

我有很多到5月的關係表示,像這樣:

​​

的想法是,有系統和許多程序很多用戶。程序中有許多用戶,用戶可能屬於多個程序。但是,在給定的程序中,用戶只能有一個角色。

我真的希望能夠寫的是:

Program.first.users.first.role 

,並有回我的角色(這僅僅是一個String)。

乾淨的方法是什麼?基本上,一旦我將用戶範圍化爲給定的程序,我該如何幹淨地訪問相關聯接表上的字段?

+0

我不確定你在問什麼。如果你在你的設計中詢問我的意見,我會說這是一個非常標準的Rails模型關聯,可以很好地工作。我在我的應用程序中設置了相同的關聯。 – Harfangk

+0

@Harfangk我明白你在說什麼了。讓我更新它。 – bitops

回答

1

你稍有不妥考慮這件事:

user.role 

將是非常曖昧的用戶可以在不同的項目不同的角色。相反,您需要將連接實體視爲自己的事情。

最簡單的方法是選擇直接連接模型:

program = Program.includes(:user_program_records, :users).first 
role = program.user_program_records 
       .find_by(user: program.users.first) 
       .role 

可以使用的東西像聯想擴展和輔助方法,使這個性感一點。

+0

有趣 - 感謝您的答案!我會試試這個。隨着用戶登錄到一個程序,我的下一個挑戰就是要將這個與Devise集成在一起。 – bitops

+0

隨着設計,你可以做一些像'role = current_user.user_program_records.find_by(program:@program).try(:role)' – max

+0

嗯,是的,我得玩弄它。我的計劃是裝飾一些被傳遞的對象,以便角色和程序API是乾淨的。 – bitops