Обмен данными между действиями контроллера Rails - PullRequest
0 голосов
/ 10 октября 2018

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

После прочтения темы совместного использования переменных между действиями контроллера я понимаю, что это невозможно из-за природы без состояния.Также прочитал, что сеанс не должен использоваться для хранения объекта, и эти переменные содержат много данных, в основном используемых для генерации графиков.Другим вариантом, я думаю, будет кэширование, с которым я не очень знаком.Или возможно сохранение переменных в Javascript в браузере.

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

class ArtistsController < ApplicationController

    def index
        if params[:term]
            respond_to do |format|
                format.html
                format.js {render "show.js.haml"}
            end
        else
            @artists= Artist.all
        end
    end

    def show
        @days=90

        # DATABASE QUERIES
        @artist= Artist.find(params[:id])
        @reach_period= Reachupdate.period(@artist.id,@days)
        @update_period=Update.period(@artist.id,@days)
        @songs_load= Song.by_artist(@artist.id).joins(:playlists)
        @song_period= @songs_load.period(@days)

        # CHART
        @updates= ChartTransformation::pop_chart(@update_period,@days)
        @reach = ChartTransformation::reach_chart(@reach_period,@days)
        @dates= ChartTransformation::dates(@days,3)
        @reach_labels= ChartTransformation::reach_labels(@reach_period,2)
        @songs= ChartTransformation::data_to_releases(@song_period, @days)
        @reach_diff = Reachupdate.diff(@reach_period)
        @pop_diff = Update.diff(@update_period)
        @playlisting= ChartTransformation::playlisting(Playlist.by_artist(@artist.id),@days)

    end

    def overview
        @days=90

        # DATABASE QUERIES
        @artist= Artist.find(params[:id])
        @reach_period= Reachupdate.period(@artist.id,@days)
        @update_period=Update.period(@artist.id,@days)
        @song_period= Song.by_artist(@artist.id).period(@days) 

        # CHART
        @updates= ChartTransformation::pop_chart(@update_period,@days)
        @reach = ChartTransformation::reach_chart(@reach_period,@days)
        @dates= ChartTransformation::dates(@days,3)
        @reach_labels= ChartTransformation::reach_labels(@reach_period,2)
        @songs= ChartTransformation::data_to_releases(@song_period, @days)
        @reach_diff = Reachupdate.diff(@reach_period)
        @pop_diff = Update.diff(@update_period)
        @playlisting= ChartTransformation::playlisting(Playlist.by_artist(@artist.id),@days)


        respond_to do |format|
            format.js {render "timeline_content.js.haml"}
        end
    end
end

1 Ответ

0 голосов
/ 10 октября 2018

Другим вариантом, я думаю, будет Caching, с которым я не очень знаком

, вам придется ознакомиться с кэшированием.это ответ на ваш вопрос.

в вашем случае он будет выполнять кэширование фрагментов в представлении, прочитайте руководства https://guides.rubyonrails.org/caching_with_rails.html#fragment-caching

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