Рендеринг удаленной части через контроллер под нагрузкой - PullRequest
0 голосов
/ 28 марта 2020

Как отобразить частичное представление через контроллер при загрузке отдельного представления в Ruby на Rails?

Заранее спасибо за помощь

Проблема : у меня есть show.html.erb для моего Patients контроллера, когда он загружается, у меня есть ряд вкладок, одна из которых представляет собой список заметок, добавленных в эту запись пациента. Notes это отдельная модель. Я хочу загрузить список заметок при загрузке show.html.erb.

. Я могу использовать приведенный ниже код для прямой визуализации представления и таким образом передавать переменные, но я бы предпочел go через контроллер и доставить notes/_list.js.erb через Patients Controller.

<%= render "notes/list", :remote => true %>

У меня есть решение, которое загружает частичное с помощью link_to, но, поскольку ссылка находится во вкладке, она ломает мою вкладку javascript, и он просто загрузит информацию о начальной загрузке страницы, а не заставит пользователя взаимодействовать с элементом.

<%= link_to "Notes".html_safe,{:controller => "patients", :action => "notes", :remote => true } %>

Это должно быть частично, так как я использую pagy для разбивки результатов на страницы и если я отображаю его через зависимую от контроллера частичную функцию, тогда навигационные ссылки будут работать, как и ожидалось.


Соответствующие маршруты

get 'patients/:id/show' => 'patients#show', as: :show_patient
get 'patients/:id/notes' => 'patients#notes', as: :notes_patient

Соответствующий контроллер пациента

def notes

    @pagy, @notes = pagy( Note.where(:patient_id => params[:id]).reverse_order, items: 2 )

    respond_to do |format|
        format.html { render "notes/list" }
        format.js { render "notes/list"  }
    end


end

заметки / список. js .erb

$('#notes-list').html('<%= escape_javascript(render('notes/list')) %>');

заметки / _list. html .erb

    <% @notes.each do |note| %>
        <%= render partial: note %>
    <% end %>

    <%== pagy_materialize_nav(@pagy) %>
    <span class="pagy-info"><%== pagy_info(@pagy) %></span>

1 Ответ

0 голосов
/ 28 марта 2020

Я полагаю, что вы можете сделать что-то подобное в контроллере:

# or whatever this partial is called
@notes_rendered = render_to_string "notes/list" 

И затем использовать его в нужном вам виде.

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