Выяснение ассоциаций Rails - PullRequest
1 голос
/ 29 мая 2011

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

Справочная информация : я работаю надсистема управления процессом рецензирования научных журналов.Этот процесс выглядит примерно так:

  1. Пользователь отправляет представление, содержащее версию.Представление содержит все материалы, которые необходимо ввести только один раз (название, сопроводительное письмо), в то время как Версия - это фактический документ, представляемый на рассмотрение.

  2. Один или несколько рецензентов распределенына представление.

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

  4. Основываясь на отзывах, администратор устанавливает статус Отправки (принять / отклонить).

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

Вопрос :

Итак, во-первых, Submissions has_many Versions принадлежит_ Submission, которую я имеюреализовано и работает нормально.

Мне интересно, как именно все остальное должно быть структурировано.Могут ли те из вас, кто обладает большим опытом, поделиться своими мыслями о том, что, по моему мнению, я собираюсь сделать дальше?

  • Сначала я думал, что в представлении есть_менные рецензенты.Но, похоже, на самом деле все должно быть наоборот - рецензенту назначается много заявок.Для иллюстрации это похоже на предоставление отдельным рецензентам разрешения комментировать определенные сообщения.Это нормальные отношения has_many?Я читал http://guides.rubyonrails.org/association_basics.html, и похоже, что это также может быть has_and_belongs_to_many.

  • Каждая версия имеет много Обзоров, поэтому у Обзоров есть Обзоры и Обзоры принадлежат Версии.

  • Кроме того, я думаю, что в поле Review должно быть поле reviewer_id, если мы знаем, кто его написал.Это должен быть Review has_one Reviewer.

В качестве отступления, я не хочу быть слишком нуждающимся, но было бы совершенно фантастически, если бы кто-то мог дать некоторое представление о нескольких строкахкода контроллера Reviewer, необходимого администратору для назначения его / ее представления.

Cheers,

Ответы [ 2 ]

1 голос
/ 29 мая 2011

Я бы сделал что-то вроде этого:

#reviewer.rb the user who reviews your versions
class Reviewer < ActiveRecord::Base
  has_many :reviews
end

#review.rb the actual review
class Review < ActiveRecord::Base
  belongs_to :reviewer
  belongs_to :version
  #usually put here a field called comment:string
end

class Version < ActiveRecord::Base
  has_many :reviews
  has_many :reviewers, :through => :reviews, :uniq=>true #this will give you the list of reviewers
  belongs_to :submission
end

class Submission < ActiveRecord::Base
  has_many :versions
end

Дайте мне знать, если вам нужны какие-либо разъяснения.

Обновите

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

class User < ActiveRecord::Base
  has_many :reviews
end

class Review < ActiveRecord::Base
  belongs_to :reviewer, :class_name=>'User'
  belongs_to :version
  #usually put here a field called comment:string
end

Затем, согласно предложению @Andy Waite, используйте гем devise для аутентификации ваших пользователей.

1 голос
/ 29 мая 2011

Вам нужна модель соединения «многие ко многим» между подчинением и рецензентом.Вы могли бы назвать это Распределение:

  • принадлежит_то: отправка
  • принадлежат_то: рецензент
  • has_many: отзывы

Затем модель обзораможет быть:

  • принадлежит_: распределение
  • принадлежит_: версия
  • обзор
  • решение
  • обратная связь

Я думаю, что это дает все, что вам нужно.

...