Ruby On Rails - Где бы я искал исходную функцию для рендера: частичный => 'x' в представлении? - PullRequest
0 голосов
/ 16 сентября 2010

Я изменяю приложение Ruby Rails - Redmine.Я хочу изменить функцию, которая выполняет частичный предварительный просмотр.По моему мнению, это достигается с помощью

<%= render :partial => 'documents/form' %>

Мне нужно изменить функцию, к которой он прикреплен.

Где мне это искать?render - это функция, которую я ищу?Является ли :partial параметром?Что делает оператор =>?

Я понимаю, что изучение Ruby и Rails решит эти проблемы, но для текущей ситуации мне просто нужно знать достаточно, чтобы внести небольшую поправку.Я знаю, что это не в контроллере.

Ответы [ 3 ]

3 голосов
/ 17 сентября 2010

Я предполагаю, что вы хотели бы изменить код самого партиала и просто хотите знать, где найти шаблон для этого партиала, а не изменять метод render, который является частью самого Rails, так какнекоторые другие ответы предложили.

Метод render указывает Rails визуализировать определенный шаблон, возможно, с некоторыми переданными параметрами. Частичное является разновидностью шаблона, который предназначен для визуализации только фрагментастраница, такая как отдельный виджет или отдельный раздел страницы.Синтаксис render :partial => "documents/form" - это способ передачи в Ruby аргументов ключевых слов;по сути, это просто рендеринг documents/form как частичного шаблона.(В Ruby это фактически эквивалентно render({:partial => "documents/form"}), который просто вызывает метод render, передавая хеш-таблицу, в которой ключевое слово :partial отображается в "documents/form", строку).

Итак, код, который будет фактически отображен, является частичным documents/forms.По соглашению партиалы загружаются из файлов с префиксом _;и если вы используете формат шаблона ERb по умолчанию, то они, скорее всего, оканчиваются на .html.erb.Поскольку весь код представления хранится в app/views, вы, вероятно, будете искать app/view/documents/_form.html.erb.Да, это не совсем очевидное соглашение, но это Rails для вас.

См. Руководство по Rails по частям и визуализации для получения дополнительной информации.

1 голос
/ 16 сентября 2010

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

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

# app/helpers/application_helper.rb
module ApplicationHelper
  def render_my_crazy_thing
    return "stuff you want to see: " + render(:partial => 'documents/form')
  end
end

Метод рендеринга ActionView # обрабатывает все различные случаи рендеринга, включая различные параметры: частичные, коллекции объектов и т. Д. Параметр :partial => 'documents/form'синтаксис ruby ​​для хэша (ключ => значение).

1 голос
/ 16 сентября 2010

Вы ищете render метод в ActionController::Base классе. Он принимает хэш опций в качестве параметра. (Кстати, если вы не можете распознать хэш ruby, когда видите его, может быть, вам немного рано «подправлять» рельсы. Сначала вы всегда можете просмотреть некоторые уроки по Ruby)

Как вы знаете, ловить обезьян очень, очень плохо, бла-бла-бла, теперь иди и стреляй себе в ногу:)

  class ActionController::Base
    def render
      # Now I'm in charge of rendering!
    end
  end
...