Это общий объект Common Lisp, а не только SBCL.
Существует переменная cl:*features*
, в которой перечислены символы для «функций», которые должны присутствовать в системе Lisp в настоящее время.
В файле Lisp выражение #+quicklisp(foo)
означает: читать и выполнять (foo)
только в том случае, если функция quicklisp
присутствует в списке функций *features*
.
В файле Lisp выражение #-quicklisp(foo)
означает: читать и выполнять (foo)
, только если функция quicklisp
НЕ присутствует в списке функций *features*
.
Это средство часто используется для скрытия или отображения конкретного кода реализации для какой-либо другой реализации Common Lisp.
См. документацию:
Если Вы имеете одну таблицу и хотите получить данные из другой таблицы, обычно это находится в ситуации has_many
отношение. Например, мы имеем @people
(Person
модель), и каждый человек has_many
адреса (Address
модель). В тех случаях лучшая вещь сделать является этим
# Controller
@people = Person.find(:all, :include => :addresses)
...
# View
@people.each do |p|
p.addresses.each do |address|
...
, Если Ваши данные не являются просто нормальными таблицами базы данных (возможно, Вы получаете его приблизительно от одного веб-сервиса на), затем хорошая вещь сделать состоит в том, чтобы создать все данные в контроллере загодя, затем передать это представлению. Что-то вроде этого
# Controller
@people = Person.find(:all)
@people.each do |p|
# attach loaded data to the person object in controller
p.addresses = Address.load_from_somewhere_by_name(p.name)
...
Этот путь код представления остается чистым, как это:
# View
@people.each do |p|
p.addresses.each do |address|
...
Довольно трудно сказать о лучшем решении для Вашей проблемы без деталей о данных и отношениях между Вашими моделями (таблицы). Общая идея является следующей: сохраните свои представления глупыми. Доберитесь все данные должны были представить представление в Вашем действии контроллеров. Внесите все изменения и вычисления в том же действии. Тогда в поле зрения используйте эти данные.
btw, если Вы говорите о проблеме N+1 тогда, читают больше о, 'включают', и 'присоединяется' к параметрам ActiveRecord.
Вы должны были бы далее объяснить свою ситуацию для больше ответа на этом. С какими операциями и другими моделями необходимо взаимодействовать? Если Вы отправляете свои образцовые ассоциации, я уверен, что мы могли бы действительно придать Вам квадратную форму далеко.
Удачи!
Если бы я был Вами, то я создал бы отдельный класс, который инкапсулирует набор данных и содержит всю логику, вовлеченную в обработку записей набора данных. Этот класс мог быть повторяемым (ответьте каждому). Тогда я передал бы экземпляр этого класса к представлению и использовал бы только его методы там.