Как мне реализовать этот код без необходимости доступа к current_user.id из модели в RoR? - PullRequest
0 голосов
/ 24 августа 2010

У меня есть модель заметки со следующей ассоциацией

note.rb

has_many :note_categories, :dependent => :destroy
has_many :categories, :through => :note_categories

Модель NoteCategory была создана для функционирования в качестве таблицы соединения между заметками и категориями.

Мне нужно реализовать следующее:

  1. Пользователь удаляет категорию из заметки.Это можно сделать, удалив одну категорию из заметки (удаляет одну запись в таблице note_categories), или полностью удалив заметку (удаляет все записи в таблице note_categories, относящиеся к заметке)
  2. перед строкой/ s в note_categories / удалено, мне нужно определить, является ли пользователь, удаляющий категорию из заметки, тем же пользователем, который изначально создал категорию (поле создателя в модели категории)
  3. Если этотот же пользователь, сама запись категории должна быть удалена

Очевидно, чтобы сделать это, мне нужно получить доступ к идентификатору пользователя, чтобы проверить поле создателя категории.Я уже использую метод before_destroy в модели NoteCategory для некоторых других вещей, но я не могу получить доступ к current_user.id там, потому что это модель, а current_user - метод в Application Controller.Из вопросов, которые я читал здесь о SO, кажется, что доступ к идентификатору текущего пользователя из модели - плохая форма.

Я не думаю, что смогу использовать контроллер в таких обстоятельствах, поскольку при удалении заметки строка :dependent => :destroy означает, что соответствующие строки в note_categories также удаляются.Мне также необходимо выполнить проверку создателя в этой ситуации, но строки note_categories удаляются с помощью метода destroy в model , а не в controller , что является поведением, определяемым :dependent => :destroy.

Так как мне поступить?Спасибо за чтение!

Ответы [ 3 ]

0 голосов
/ 24 августа 2010

Я думаю, что вы хотите вести журнал того, кто создал сообщение и кто его удаляет. Метод before_destroy выполняет функцию удаления ассоциаций, и я думаю, что он работает нормально для вас. на ведение записи о том, удаляет ли пользователь, создавший заметку, заметку или нет. Я надеюсь, что это поможет вам решить эту проблему

http://rohitsharma9889.wordpress.com/2010/08/19/logging-in-ruby-on-rails/

EDIT: Вы также можете попробовать прочитать эту статью. Я бы порекомендовал вам предпочесть этот вариант выше

Переменные среды в модели

0 голосов
/ 24 августа 2010

Вы говорите

Перед тем, как строки / строки в note_categories будут удалены, мне нужно определить, является ли пользователь, удаляющий категорию из заметки, тем же пользователем, который изначально создал категорию (поле создателя в модели категории) Если это один и тот же пользователь, сама запись категории должна быть удалена

Вы уверены, что не хотите делать такую ​​вещь? Что если пользователь использовал одну и ту же категорию для многих заметок и хочет удалить ее из одной из них? Вы уверены, что хотите удалить запись из note_categories, но следует ли вам также удалить саму категорию?

Распространенной реализацией для такого сценария является проверка при удалении note_category (возможно, через before_destroy), является ли она последней заметкой_категории для категории, и удалите ее, если она есть. Это также означает, что при удалении заметки должны быть удалены только связанные примечания_категории, а не сами категории.

0 голосов
/ 24 августа 2010

Одним из способов сделать это может быть добавление attr_accessor к модели Note следующим образом:

# in Note.rb
attr_accessor :destroyed_by

и установка его перед уничтожением записи:

# NotesController#destroy
@note.destroyed_by = current_user.id
@note.destroy

Затем в вашемNote.rb before_destroy вызов, вы можете проверить идентификатор создателя категории по destroyed_by id.

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