render: частичный возврат массива, когда он определен в ApplicationController, и строки, когда в ApplicationHelper - PullRequest
2 голосов
/ 25 сентября 2011

Этот метод:

  def admin_buttons
    render :partial => 'portable/admin/admin_buttons'
  end

возвращает это значение (не html_safe), когда определено в ApplicationControler, и создал помощника с помощью helper_method:

["вывод моей части"]

Но обычно возвращает ожидаемую строку, когда она определена в ApplicationHelper.

Я не понимаю.Это новое поведение, насколько я знаю в рельсах 3.1

1 Ответ

3 голосов
/ 25 сентября 2011

Проще говоря, не вызывайте контроллер render в качестве помощников.Это просто не работает таким образом,

render в контроллере и render в помощнике нельзя использовать взаимозаменяемо.Это не ново в Rails 3.1.

Когда вы вызываете render в контроллере, он в конечном итоге вызывает render в представлении, результат которого сохраняется как его response_body.Тело ответа в конечном итоге возвращается так, как ожидает Rack, в виде строкового массива (что вы видите в качестве выходных данных).

Эти ссылки могут пролить некоторый свет на то, как это работает:
- Определение рендера (металл) в контроллере
- Это метод суперкласса, в котором установлено response_body (abstract_controller)

...