Я получаю следующую ошибку:
У вас есть нулевой объект, когда вы этого не сделали
ожидайте этого! Вы могли ожидать
экземпляр массива. Произошла ошибка
при оценке nil.size
Исходя из текущего пользователя, когда они переходят на страницу, я хочу ограничить их тем, что они могут видеть, основываясь на их сайте. Проблема в том, что нет прямой связи между сайтом и таблицей пользователей. Пользователь has_one контакта (информация о пользователе хранится в переменной current_user). На сайте есть много контактов. И на сайте has_many студентов, где таблица студентов имеет внешний ключ site_id. Таким образом, существует связь между учениками и сайтом, поэтому, когда текущий пользователь переходит на страницу учеников, он может видеть учеников только с того же сайта, что и они. Я могу сделать это путем жесткого кодирования числа в named_scope, чтобы отображать только студентов для сайта current_user. Но разные пользователи будут принадлежать разным сайтам, поэтому при входе в систему сайт, с которым они связаны, изменится. Вот в чем проблема - динамически установить это значение в named_scope. Вот что у меня есть:
StudentsController
def index_scoper
if current_user.role_id == 8
super.site_staff_limit while current_user[:site_id]
# The problem is the user table has no site_id. There is no direct
# link between the users table and sites table. However, there is
# a link between users and contacts and then site and contacts and
# then site and students, where students table has site_id.
else
super.with_state.with_site
end
end
Модель студента
named_scope :site_staff_limit, lambda {|site_id| {:conditions => {:site_id => site_id}}}
Спасибо за любые предложения.
связь между таблицами:
пользователи: contact_id
contact: первичный ключ, contactable_id, contactable_type
сайт: первичный ключ
студент: site_id
Модель пользователя
принадлежат: контакт
Модель контакта
has_one: пользователь
own_to: contactable,: polymorphic => true,: зависимый =>: уничтожить
Модель сайта
has_many: контакты,: как =>: контактный
has_many: студенты
Студенческая модель
принадлежат: сайт
Это успешно ограничивает студентов по сайту:
StudentsController
def index_scoper
if current_user.role_id == 8
super.site_staff_limit
еще
super.with_state.with_site
конец
конец
Студенческая модель
named_scope: site_staff_limit,: условие => {: site_id => 1}
Проблема в том, что разные пользователи будут принадлежать к разным сайтам, поэтому они могут получить доступ только к записям учеников сайта, к которому они принадлежат. У меня возникают трудности с тем, чтобы сделать named_scope выше достаточно динамичным, чтобы выполнить это.