2013-12-07 5 views
5

Мне нужно отобразить некоторые шаблоны и отправить блок HTML в SendGrid для замены электронной почты. Так, к сожалению, я делаю некоторые рендеринга в модели, как это:Доступ к помощникам URL-адресов при рендеринге Partials из моделей Rails

view = ActionView::Base.new(Rails.configuration.paths["app/views"].first) 
    view.render(:partial => template_name) 

Даже если я добавил:

view.extend Rails.application.routes.url_helpers 
    view.extend ActionView::Helpers::UrlHelper 
    view.extend ApplicationHelper 

Парциальное не имеют доступа к URL помощникам, как url_for, если я явно не определить модуль, например, в следующем:

Rails.application.routes.url_helpers.edit_user_url(user, :host => Rails.application.config.action_mailer.default_url_options[:host]) 

Есть ли более чистый способ использования URL-помощника в шаблонах, вызванных с моделей?

+0

ли решить эту проблему вы? Я в настоящее время копаю ту же проблему и ничего полезного, к сожалению. –

ответ

-1

Привет, чтобы получить доступ к URLs внутри взглядов, вы можете сделать что-то вроде

view = ActionView::Base.new(Rails.configuration.paths["app/views"].first) 
view.extend ApplicationHelper 

, а затем

template = view.render(file: '#_file',:locals => { #_path: #_path, ...}) 
+0

Но это почти то же самое, что и пример OP в вопросе –

0

Обходной я нашел это передать url_helpers как часть locals:

url = Rails.application.routes.url_helpers 
view = ActionView::Base.new(Rails.configuration.paths['app/views'].first) 
view.render(partial: template, locals: locals.merge(url: url)) 

, а затем на вид:

<%= url.thing_path %> 

отметить Также вы должны настроить ваш default_url_options с:

# config/environments/production.rb 
    config.after_initialize do 
    Rails.application.routes.default_url_options = { host: 'productos.meloncargo.com' } 
    end 

# config/environments/development.rb 
    config.after_initialize do 
    Rails.application.routes.default_url_options = { host: 'localhost', port: 3000 } 
    end