выполнить процесс проверки в запросе - PullRequest
0 голосов
/ 11 февраля 2020

Я делаю запрос, который показывает мне всех пользователей в моем представлении, пользователи могут загружать свои изображения, которые сохранены в таблице, называемой «работает», или они могут иметь свой Instagram, связанный с токеном, который сохраняется в поле ». token_instagram "или если профиль опубликован c, они могут сохранить свое имя пользователя в поле" instagram ", однако некоторые пользователи имеют недопустимые токены или их учетные записи больше не существуют, поэтому их профили отображаются пустыми, когда все они отображаются в списке , Возможно ли при выполнении запроса проверить, если процесс, который получает изображения инстаграм пользователей, не приносит изображения, для сортировки пустых профилей в конце?

это мой запрос:

@users = User.includes(:plan).with_avatar.select("users.*, works.user_id")
@users = @users.joins("left outer join works ON works.user_id=users.id")
@users = @users.distinct
@users = @users.order("CASE WHEN (`order` IS NULL OR `order` = 0) THEN 1 ELSE 0 END, CASE WHEN (`instagram_token` IS NULL AND `instagram` IS NULL AND works.user_id IS NULL) THEN 1 ELSE 0 END, CASE WHEN `order` <= 170 THEN RAND() ELSE `order` END")
@users = @users.paginate(page: page).per_page(18)

По-моему, это то, что я использую для проверки того, что у меня нет связанной работы, или для вывода изображений Instagram

<% if resources %>
    <% if token %>
        <%
        require "open-uri"
        photo_count = 5
        begin
            file        = open("https://api.instagram.com/v1/users/self/media/recent/?access_token=#{resources.instagram_token}&count=#{photo_count}")
            data        = JSON.parse file.read
        %>
            <ul id="<%=resources.id%>">
                <script>
                    var token = '<%=resources.instagram_token%>',
                            num_photos = 10,
                            scrElement = document.createElement( 'script' );
                            var div = document.createElement("ul");

                    window.mishaProcessResult<%=resources.id%> = function( data ) {
                        for( x in data.data ){
                            document.getElementById( '<%=resources.id%>' ).innerHTML += '<li class="image"><img src="' + data.data[x].images.low_resolution.url + '"></li>';
                        }
                    }

                    scrElement.setAttribute( 'src', 'https://api.instagram.com/v1/users/self/media/recent?access_token=' + token + '&count=' + num_photos + '&callback=mishaProcessResult<%=resources.id%>' );
                    document.body.appendChild( scrElement );

                </script>
        </ul>
        <% rescue => ex %>
            <% if !resources.instagram.nil? %>
                <% if resources.instagram.length > 0 %>
                    <ul id="<%=resources.id%>">

                            <script>
                                var name = "<%=resources.instagram.downcase%>";
                                $.get("https://images"+~~(Math.random()*33)+"-focus-opensocial.googleusercontent.com/gadgets/proxy?container=none&url=https://www.instagram.com/" + name + "/", function(html) {
                                        if (html) {
                                                var regex = /_sharedData = ({.*);<\/script>/m,
                                                    json = JSON.parse(regex.exec(html)[1]),
                                                    edges = json.entry_data.ProfilePage[0].graphql.user.edge_owner_to_timeline_media.edges;
                                            $.each(edges, function(n, edge) {

                                                var node = edge.node;
                                                document.getElementById( '<%=resources.id%>' ).innerHTML += '<li class="image"><img src="' +node.thumbnail_src+ '"></li>';

                                            });
                                        }
                                });
                            </script>
                    </ul>



                <% end %>
            <% else %>
                <ul>
                    <li class='image'></li>
                </ul>
            <% end %>
        <% end %>
    <% else %>

                <ul id="<%=resources.downcase%>">
                        <script>
                            var name = "<%=resources.downcase%>";
                            $.get("https://images"+~~(Math.random()*33)+"-focus-opensocial.googleusercontent.com/gadgets/proxy?container=none&url=https://www.instagram.com/" + name + "/", function(html) {
                                    if (html) {
                                            var regex = /_sharedData = ({.*);<\/script>/m,
                                                json = JSON.parse(regex.exec(html)[1]),
                                                edges = json.entry_data.ProfilePage[0].graphql.user.edge_owner_to_timeline_media.edges;
                                        $.each(edges, function(n, edge) {

                                            var node = edge.node;

                                            document.getElementById( '<%=resources.downcase%>' ).innerHTML += '<li class="image"><img src="' +node.thumbnail_src+ '"></li>';

                                        });
                                    }
                            });
                        </script>
                </ul>
    <% end %>
<% else %>
    <ul>
        <li class='image'></li>
    </ul>
<% end %>
...