Я делаю это так:
На мой взгляд, у меня есть такая ссылка:
<%= link_to 'Show Current Inventory Levels', parts_inventory_levels_path, :target => '_blank'%>
:target => '_blank'
заставляет его открываться в новой вкладке/окне. parts_inventory_levels_path
находится в route.rb как:
get 'parts/inventory_levels' => 'parts#inventory_levels'
Итак, он обращается к контроллеру деталей и вызывает действие inventory_levels
, которое:
def inventory_levels
@parts = Part.all.order(:name)
render 'inventory_levels', layout: "print_table"
end
Вот ключевая часть, layout: "print_table"
. У меня есть файл макета в папке app/views/layout/
с именем print_table.html.erb
:
<head>
<%= stylesheet_link_tag 'print', media: 'all' %>
<%= javascript_include_tag 'application' %>
<%= csrf_meta_tags %>
<%= yield(:head) %>
</head>
<body>
<%= yield %>
</body>
Таким образом, данные из моих вызовов действий контроллера отображаются в inventory_levels.html.erb:
<%= link_to_function('Print this Page', 'javascript:print()') %>
<br>
<table id="parts_table" class="table pretty" border='1'>
<thead>
<tr>
<th class="sortable">Name</th>
<th class="sortable">Sku</th>
...table omitted for brevity
Обратите внимание на первую строку, она вызывает функцию javascript:print()
для печати страницы. Причина, по которой я отображаю отдельную страницу, заключается в том, что я хочу отформатировать эту страницу очень простым способом, который лучше подходит для печати. Приятно то, что я все еще могу использовать table_sorter
javascript для сортировки таблицы перед ее печатью.
«Меня заставили поверить, что вторым аргументом для link_to была страница, которую следует распечатать». Это неправильно. Вторая часть link_to
— это путь или URL-адрес. Rails интерпретирует ваш table_ingredients
как
<a href="/<controller name>/table_ingredients">print ingredients</a>
Я не знаю имени вашего контроллера, поэтому мне пришлось использовать заполнитель.
Я мог бы помочь вам написать фактический код, но вы должны просто использовать то, что я здесь применил к вашему коду. Но если вам нужна дополнительная помощь, опубликуйте свой контроллер и любые применимые маршруты. Вы, вероятно, можете уменьшить повторяющийся код, передав одному и тому же контроллеру значение того, какой частичный код вы хотите отобразить (я визуализирую совершенно новую страницу, но частичный также должен работать). Также, вероятно, нет возможности использовать AJAX.
person
Beartech
schedule
09.12.2015
print
подfile
в браузере? Что вы подразумеваете под загрузкой всей страницы перед печатью? Этот вопрос требует дополнительной информации и примеров того, чего вы пытаетесь достичь. - person Beartech   schedule 08.12.2015