2015-08-07 3 views
1

У меня есть работник sidekiq, который должен отобразить файл и сохранить его.render_to_string с параметрами url

В процессе рендеринга через render_to_string я передаю кучу переменных и переменных экземпляра, таких как current_user, который отлично работает.

Но для визуализации моего представления мне также нужны параметры URL-адреса, такие как params[:action]. Как передать их на просмотр с помощью render_to_string?

# SpecialWorker.rb 
class ConclusionRenderingWorker < AbstractController::Base 
    include Sidekiq::Worker 
    ac = ActionController::Base.new() 

    data = ac.render_to_string(:template => "my/rendering_view.html.erb", 
    layout: false, 
    :locals => { 
     :@instance_variable1 => instance_variable1, 
     :params => [action: 'myaction'] 
    } 
) 

# my/rendering_view.html.erb 
    <% unless params[:action] == 'dashboard' %> 
    Blah 
    <% else %> 
    Blubb 
    <% end %> 

ошибка я получил:

2015-08-07T13:20:20.103Z 54344 TID-oxuugdhn4 WARN: "class"=>"ConclusionRenderingWorker", "args"=>[1, 18], "retry"=>true, "queue"=>"default", "jid"=>"1c97d91dc5db162ecd225418", enqueued_at"=>1438953617.792468, "error_message"=>"undefined method `parameters' for nil:NilClass", error_class"=>"ActionView::Template::Error", failed_at"=>1438953620.102505, "retry_count"=>0} 
2015-08-07T13:20:20.103Z 54344 TID-oxuugdhn4 WARN: undefined method `parameters' for nil:NilClass 

Не работает:

:params => [action: 'conclusion'] 

:@params => [action: 'conclusion'] 

У меня также есть проблемы со всеми путями:

<%= url_for :host =>'http://localhost:3000/', only_path: true, controller: API::V1::CommentsController, action: :load_more_comments %> 
... 
.. 
. 

который бросает

undefined method `host' for nil:NilClass /Users/jan/.rbenv/versions/2.0.0-p643/lib/ruby/gems/2.0.0/gems/actionpack-3.2.14/lib/action_controller/metal/url_for.rb:30:in `url_options'

/Users/jan/.rbenv/versions/2.0.0-p643/lib/ruby/gems/2.0.0/gems/actionpack-3.2.14/lib/action_view/helpers/url_helper.rb:37:in `url_options'

/Users/jan/.rbenv/versions/2.0.0-p643/lib/ruby/gems/2.0.0/gems/actionpack-3.2.14/lib/action_dispatch/routing/url_for.rb:148:in `url_for'

/Users/jan/.rbenv/versions/2.0.0-p643/lib/ruby/gems/2.0.0/gems/actionpack-3.2.14/lib/action_view/helpers/url_helper.rb:107:in `url_for'

ответ

0

:params => [action: 'myaction'] список с хэш внутри, для параметров [: действия], чтобы работать, вы должны сделать :params => { action: 'myaction' }

Update1:

Переменная, называемая params, кажется, имеет специальную обработку внутри рельсов. Вы можете сделать следующее:

# SpecialWorker.rb 
class ConclusionRenderingWorker < AbstractController::Base 
    include Sidekiq::Worker 
    ac = ActionController::Base.new() 

    data = ac.render_to_string(:template => "my/rendering_view.html.erb", 
    layout: false, 
    :locals => { 
     :@instance_variable1 => instance_variable1, 
     :action => 'myaction' 
    } 
) 

# my/rendering_view.html.erb 
<% unless action == 'dashboard' %> 
    Blah 
<% else %> 
    Blubb 
<% end %> 

Так что избегайте использования параметров, а просто передавайте значения в качестве локальных переменных в шаблон.

+0

Это не работает. Кажется, что никакой запрос не доступен в методе render_to_string. Также hardcoded: host в url_for не работает – Jan

+0

@Jan Кажется, вы не можете использовать params как имя переменной. Не уверен в проблеме url_for, может быть, вы должны задать отдельный вопрос об этом. –

+0

Я думал, что к ActionController может быть присоединен класс, который предоставляет методы запроса. – Jan