Rails: получение данных из таблицы для каждой итерации цикла

Это общий объект Common Lisp, а не только SBCL.

Существует переменная cl:*features*, в которой перечислены символы для «функций», которые должны присутствовать в системе Lisp в настоящее время.

В файле Lisp выражение #+quicklisp(foo) означает: читать и выполнять (foo) только в том случае, если функция quicklisp присутствует в списке функций *features*.

В файле Lisp выражение #-quicklisp(foo) означает: читать и выполнять (foo), только если функция quicklisp НЕ присутствует в списке функций *features*.

Это средство часто используется для скрытия или отображения конкретного кода реализации для какой-либо другой реализации Common Lisp.

См. документацию:

28
задан ARemesal 11 November 2008 в 15:01
поделиться

4 ответа

Если Вы имеете одну таблицу и хотите получить данные из другой таблицы, обычно это находится в ситуации 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|
    ...
46
ответ дан Orion Edwards 11 November 2008 в 15:01
поделиться
  • 1
    @FahmiRamadhan я полагаю, что, когда GitHub включает третьей стороне защиту DDOS, их записи dns и/или серверы изменятся, выше действий сбросит Ваши записи dns, указывая к DDOS на защиту серверов. (I' ve добавил это к моему ответу), – Jens Timmerman 7 May 2018 в 15:25

Довольно трудно сказать о лучшем решении для Вашей проблемы без деталей о данных и отношениях между Вашими моделями (таблицы). Общая идея является следующей: сохраните свои представления глупыми. Доберитесь все данные должны были представить представление в Вашем действии контроллеров. Внесите все изменения и вычисления в том же действии. Тогда в поле зрения используйте эти данные.

btw, если Вы говорите о проблеме N+1 тогда, читают больше о, 'включают', и 'присоединяется' к параметрам ActiveRecord.

1
ответ дан IDBD 11 November 2008 в 15:01
поделиться
  • 1
    На самом деле, если точка нескольких границ должна управлять стиранием, которое полностью имеет смысл, потому что я просто собираюсь стереться для Возражения. – David Moles 13 October 2008 в 13:11
  • Сохраняют всю логику на Вашем @dataset объекте в действии контроллера
  • , Используют методы в Ваших моделях для взаимодействия с другими объектами модели, в которых Вы нуждаетесь
  • , с Вами нужно оставить только @dataset для Вашего представления, что можно представить в частичном.

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

Удачи!

0
ответ дан mwilliams 11 November 2008 в 15:01
поделиться

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

1
ответ дан Adam Byrtek 11 November 2008 в 15:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: