Можно ли визуализировать частичное, передавая локальную переменную для коллекции? - PullRequest
0 голосов
/ 03 января 2019

В Rails 5.2.2 Я пытаюсь визуализировать партиал, используя локальную переменную в качестве коллекции, но при запуске теста для get представления я получаю ошибку в партиале:

ActionView::Template::Error:         ActionView::Template::Error: undefined local variable or method `item' for #<#<Class:0x00000007503de8>:0x000000093f2240>
        app/views/work_centers/_item_kanban.html.erb:1:in `_app_views_work_centers__item_kanban_html_erb__413475955005549970_77587680'
        app/views/work_centers/kanban.html.erb:5:in `block in _app_views_work_centers_kanban_html_erb__2029427675221229249_77567000'
        app/views/work_centers/kanban.html.erb:4:in `each'
        app/views/work_centers/kanban.html.erb:4:in `_app_views_work_centers_kanban_html_erb__2029427675221229249_77567000'
        test/controllers/work_centers_controller_test.rb:27:in `block in <class:WorkCentersControllerTest>'

work_centers_controller.rb

def kanban
  # Get hash of form {"Laser"=>["Item1", "Item2"], "Brake"=>["Item2"]}
  @wc_items = HashWithIndifferentAccess.new
  WorkCenter.all.each do |wc| 
    @wc_items[wc.name] = Item.where('id IN (SELECT item_id 
                                            FROM routings 
                                            WHERE work_center_id = ?)', wc.id) 
                             .where('id NOT IN (SELECT item_id 
                                                FROM status_updates 
                                                WHERE work_center_id = ?)', wc.id) 
                             .pluck(:number)
  end
end

kanban.html.erb

<% @wc_items.each do |wc, items| %>
  <%= render partial: 'item_kanban', collection: items %>
<% end %>

_item_kanban.html.erb

<%= link_to item, class: "list-group-item" do %>
  <%= item.number %>
<% end %>

В других представлениях я визуализирую партиал, используя переменную экземпляра коллекции (например, @items), и ссылаюсь на единственную переменную в партиале (например, item).Я ожидал, что эта часть будет вести себя так же, используя локальную переменную коллекции.

1 Ответ

0 голосов
/ 03 января 2019

Пожалуйста, попробуйте

<%= render partial: 'item_kanban', collection: items, as: :item %>

Теперь вы можете получить доступ

<%= link_to item, class: "list-group-item" do %>
  <%= item.number %>
<% end %>

Когда вы сделали

<%= render partial: 'item_kanban', collection: items %> даст вам локальную переменную item_kanban, а не item.

Так что вам нужно указать его as: :item, теперь вы можете получить доступ к item

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...