0

我有幾個小ROR「大多是靜態的」類網站和我工作的更深層次的東西一點點,我沒有用太多的經驗...的Ruby on Rails應用程序使用多個模型

大圖片命名。 帳戶有許多用戶和項目。用戶有很多項目。用戶添加很多文件和筆記到項目中......

最後我需要生成一個視圖,用戶可以在其中看到他們的項目,文件,&筆記。以類似於一個下面的手動創建的「概念證明」列表或表格:

Project1 
    Notes 
     note1 
     note2 
     note3 
    Files 
     file1 
     file2 
     file2 
    Users 
     user1 
     user2 
Project2 
    Notes 
     note1 
     note2 
     note3 
    Files 
     file1 
     file2 
     file2 
    Users 
     user1 
     user2 

上面會使用某種for循環的嵌入紅寶石來產生列表但在此之前,我到我需要確保我有適當的模型關聯和調用。

我試圖從我所有的表中沒有外鍵,但我一直在與多模式最佳實踐混淆。沒有外鍵我想我需要一個連接表,它可以是一個使用「model1_model2」命名約定?和「:through」模型關係的模型?

我的模型現在(這已經改變了很多)有:

帳戶:

class Account < ActiveRecord::Base 
has_many :projects 
has_many :users 

用戶:

class User < ActiveRecord::Base 
has_one :account 
has_many :projects, :through => :accounts 
has_many :dataFiles, :through => :projects 
has_many :notes, :through => :projects 

項目:

class Project < ActiveRecord::Base 
belongs_to :account 
has_many :users 
has_many :datafiles 
has_many :notes 

數據文件:

class DataFile < ActiveRecord::Base 
belongs_to :projects 
belongs_to :users 

注:

class Note < ActiveRecord::Base 
belongs_to :project 
belongs_to :users 

正如你所看到的;我很困惑!我已經完成了一系列教程並閱讀了一本書;這是我的第一個真正的世界應用程序,不只是主要是靜態頁面... ...

似乎有很多方法可以做到這一點。我想我正在尋找一些關於我應該使用什麼模型以及如何連接它們的專家指導。

任何方向或建議,你可以提供非常感謝。謝謝!

回答

1

如果我正確

class Accounts < ActiveRecord::Base 
    # these two associations say an Account can have many users. 
    # It's also assuming users can be associated with multiple accounts. If that's false 
    # i'd recommend putting the account_id on the user and simply removing this many-to-many table 
    has_many :account_users 
    has_many :users, :through => :account_users 

    # accounts can be mapped to many projects and projects can be mapped to many accounts 
    # if a project only belongs to one account, drop the accounts_projects many-to-many table 
    # and just put the account_id on the project. 
    has_many :account_projects 
    has_many :projects, :through => :account_projects 
end 

# account_user table will have `id`, `account_id`, `user_id` and anything else you need 
class AccountUser < ActiveRecord::Base 
    belongs_to :account 
    belongs_to :user 
end 

class User < ActiveRecord::Base 
    has_many :projects 
    has_many :files 
end 

# account_projects table will have `id`, `account_id`, `project_id` and anything else you need 
class AccountProject < ActiveRecord::Base 
    belongs_to :account 
    belongs_to :project 
end 

class Project < ActiveRecord::Base 
    has_many :data_files 
    has_many :notes 

    has_many :project_users 
    has_many :users 
end 

# project_users table will have `id`, `project_id`, `user_id` and anything else you need 
class ProjectUser < ActiveRecord::Base 
    belongs_to :project 
    belongs_to :user 
end 

# data_files table will have `id`, `project_id`, `user_id` and anything else you need 
class DataFile < ActiveRecord::Base 
    belongs_to :project 
    belongs_to :user 
end 

# notes table will have `id`, `project_id`, `user_id` and anything else you need 
class Note < ActiveRecord::Base 
    belongs_to :project 
    belongs_to :user 
end 

理解您這是否有助於解釋如何協會將在軌工作?

注意 AccountUser,AccountProject和ProjectUser表都用於我瞭解您需要的多對多關聯。

如果您打算將任何其他屬性與關聯映射相關聯(例如與帳戶和用戶有關的關係),則直通關聯非常有用。

如果您只需要一個簡單的多對多關係而不需要自定義屬性,則可以簡單地使用has_and_belongs_to_many方法,不過我通常先選擇:through選項。

+0

這非常有幫助!感謝您的指導。 – twinturbotom

0

的沒有回車註釋字段刺激我......

用戶只能屬於一個帳戶(除了管理員),所以我想我會接受你的建議,並刪除多對多表,並使用一個ACCOUNT_ID用戶表中的字段。 accounts_projects多對多...

聽起來好像關聯所有這些模型的最佳方式是「belongs_to」和「has_many」,外鍵存儲在適當的表中。我很欣賞你所提供的教育以及關聯所有這些模型的真實世界洞察力。謝謝!希望我不會遇到任何設置這一切的問題。

謝謝!