2013-12-17 2 views
1

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

class Department < ActiveRecord::Base 
has_many :courses 
end 

class Course < ActiveRecord::Base 
belongs_to :department 
has_many :students 
end 

class Student < ActiveRecord::Base 
belongs_to :course 
end 

Отдел и курс имеют зависимое ограничение foreign_key. Когда отдел удален, все его курсы необходимо удалить. Но если курс имеет назначенный ученик, этот курс не может быть удален. Смысл, отдел, в свою очередь, не может быть удален.

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

ответ

0

Самый удобный способ справиться с этой ситуацией - это, вероятно, просто показать ключ удаления все время и добавить обратный вызов ActiveRecord before_destroy, который может проверить, что отдел может быть уничтожен.

Имейте в виду, что если вы действительно хотите показывать ссылку на удаление только тех, которые могут быть удалены, я бы рекомендовал вам разделить проверку на метод как класса курса, так и класса отдела, в соответствии с наилучшей практикой соблюдение Law of Demeter

0

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

Так что ненужно для любого запроса db для проверки ограничений ...

Смежные вопросы