метод фреймворка ruby ​​-> что здесь происходит? - PullRequest
0 голосов
/ 01 сентября 2009
def partial(template, *args)
  options = args.extract_options!
  options.merge!(:layout => false)
  if collection = options.delete(:collection) then
    collection.inject([]) do |buffer, member|
      buffer << erb(template, options.merge(:layout =>
      false, :locals => {template.to_sym => member}))
    end.join("\n")
  else
    erb(template, options)
  end
end

Этот метод не имеет документов. Кажется, это какой-то способ позволить вам добавить дополнительные функции к частичному рендерингу в шаблоне erb.

Как работает этот код Ruby?

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

Ответы [ 2 ]

2 голосов
/ 01 сентября 2009

Работает так же, как и render :partial в Rails - он принимает партиал и список опций (например, набор объектов для рендеринга с использованием партиала) и рендерит партиал с этими опциями. За исключением того, что этот метод, кажется, жестко закодирован в ERb. Если это из Rails, я думаю, что это должен быть очень старый метод, который не предназначен для использования, но еще не удален (возможно, для совместимости с чем-то или другим).

* * * * * * * * * * * * * * * * * * * * * * * * * * 1004 ”* * * * * * *

options.delete(:collection) удаляет запись для ": collection" из хеша опций и возвращает ее, если она существует. Если записи коллекции не было, она возвращает nil, поэтому связанный блок if не будет работать. Если существует коллекция, она визуализирует частичное для каждого элемента коллекции и возвращает накопленный результат рендеринга всех из них. Если коллекции нет, она просто отображает партиал с указанными параметрами.

0 голосов
/ 01 сентября 2009

Чтобы понять это, вам нужно понять документы по этим методам:

  • extract_options!
  • Enumerable / Array: объединить, объединить !, вставить, объединить, удалить

Как только вы поймете это, здесь нет ничего сложного в синтаксисе. Вы должны быть в состоянии прочитать это прямо до конца.

Что-то особенное?

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