У меня есть приложение Rails 2.3.5, и я пытаюсь отрендерить несколько Partials из модели (я знаю, я знаю - я не должен). Причина, по которой я это делаю, заключается в том, что я интегрирую сервер Comet (APE) в свое приложение Rails и мне нужно отправлять обновления на основе событий модели (например, after_create).

Я пробовал это сделать:

ActionView::Base.new(Rails::Configuration.new.view_path).render(:partial  => "pages/show", :locals => {:page => self})

Это позволяет мне отображать простые частичные данные, которые не являются помощниками пользователя, однако, если я попытаюсь использовать link_to в моем частичном файле, я получаю сообщение об ошибке:

undefined method `url_for' for nil:NilClass

Я убедился, что объект, передаваемый в «путь_проекта (проект)», не равен нулю. Я также пробовал включать:

include ActionView::Helpers::UrlHelper
include ActionController::UrlWriter

В модуле, который содержит метод, выполняющий вышеуказанный вызов «рендеринга».

Кто-нибудь знает, как это обойти?

Благодарность

5
empire29 9 Июн 2010 в 09:34
Rails.configuration.view_path
 – 
tribalvibes
3 Окт 2010 в 13:55

2 ответа

Лучший ответ

Мы используем гем render_anywhere и остались довольны им.

От README:

require 'render_anywhere'

class AnyClass
  include RenderAnwhere

  def build_html
    html = render :template => 'normal/template/reference',
                  :layout => 'application'
    html
  end
end
7
klochner 16 Сен 2011 в 21:29
1
Вопрос был о Rails 2.3.x, но гем предназначен для "> = 3.0.7"
 – 
Michał Szajbe
3 Дек 2013 в 02:12
2
Я предполагаю, что гем был нацелен на 2.X, когда был задан этот вопрос. Попробуйте использовать старую версию с тегами, если вы все еще используете 2.3.x
 – 
klochner
3 Дек 2013 в 06:30

Включения этих двух модулей должно быть достаточно. Может, вы забыли установить default_url_options[:host]? Без него вы можете использовать помощников _path, но не _url.

Включите эти модули и проверьте, работает ли он в irb, возможно, это приведет вас к правильному решению.

0
samuil 11 Июн 2010 в 23:00