Применение Ruby on rails с несколькими моделями - PullRequest
0 голосов
/ 31 августа 2011

У меня есть несколько небольших сайтов типа «ROR», в основном «статического» типа, и я работаю над чем-то более глубоким, с чем у меня мало опыта…

Номенклатура БОЛЬШОЙ картинки.Аккаунты имеют много пользователей и проектов.У пользователей много проектов.пользователи добавляют много файлов и заметок в проекты ....

В конце мне нужно создать представление, где пользователи могут видеть свои проекты, файлы и заметки.В списке или таблице, похожих на созданное вручную «доказательство концепции», приведенное ниже:

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

Приведенный выше список будет сгенерирован с использованием некоторого встроенного рубина для цикла, но прежде чем я попаду в это, мне нужночтобы убедиться, что у меня есть правильные ассоциации моделей и вызовы.

Я пытаюсь получить НЕТ внешних ключей от всех моих таблиц, но я действительно путаюсь с мультимодельными лучшими практиками.Без внешних ключей, я думаю, мне нужна таблица соединения, которая могла бы быть моделью, использующей соглашение об именах "model1_model2"? И отношение модели ": through"?

моих моделей сейчас (это менялось много)являются:

Счет:

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

end

Пользователь:

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

end

Проект:

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

end

DataFile:

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

end

Примечание:

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

end

As youможет, вероятно, увидеть;Я запутался здесь!Я сделал кучу уроков и прочитал книгу;это мое первое приложение в реальном мире, которое состоит не только из статических страниц ...

Кажется, есть много способов сделать это.Я думаю, что я ищу какое-то экспертное руководство о том, какие модели мне следует использовать и как их подключать.

Будем очень благодарны за любые советы и рекомендацииСпасибо!

Ответы [ 2 ]

1 голос
/ 31 августа 2011

Если я вас правильно понял

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 голосов
/ 02 сентября 2011

Поле комментариев возврата без каретки раздражает меня ...

Пользователи могут принадлежать только к одной учетной записи (кроме администраторов), поэтому я думаю, что я приму ваше предложение и удалю таблицу многие ко многим и использую поле account_id в таблице пользователей. То же самое для account_projects многие ко многим ...

Похоже, что лучший способ связать все эти модели - это "own_to" и "has_many" с внешними ключами, хранящимися в соответствующих таблицах. Я ценю то образование, которое вы дали, и реальное понимание всех этих моделей. Спасибо! надеюсь, у меня не возникнет проблем с настройкой всего этого.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...