Показывать записи только принадлежащие этому пользователю ruby ​​на рельсах - PullRequest
0 голосов
/ 23 октября 2019

У меня есть следующий код

<div class="container mt-4">
  <div class="card">
    <div class="card-header">
      <h5>Name: <%= @user['name'] %> | Username: <%= @user['username'] %></h5>
    </div>

    <div class="card-body">
      <h5 class="card-title">User details</h5>

      <ul class="card-text">
        <li>ID: <%= @user['id'] %></li>
        <li>Name: <%= @user['name'] %></li>
        <li>E-mail: <%= @user['email'] %></li>
      </ul>

      <ul>
        <h5>Address</h5>
        <li>Street: <%= @user['address']['street'] %></li>
        <li>Suite: <%= @user['address']['suite'] %></li>
        <li>City: <%= @user['address']['city'] %></li>
        <li>Zipcode: <%= @user['address']['zipcode'] %></li>
        <li>Geo Lat: <%= @user['address']['geo']['lat'] %></li>
        <li>Geo Lng: <%= @user['address']['geo']['lng'] %></li>
      </ul>

      <ul>
        <li>Phone Number: <%= @user['phone'] %></li>
        <li>Website: <%= @user['website'] %></li>
      </ul>

      <ul>
        <h5>Company details</h5>
        <li>Company name: <%= @user['company']['name'] %></li>
        <li>Company catchphrase: <%= @user['company']['catchPhrase'] %></li>
        <li>Company bs: <%= @user['company']['bs'] %></li>
      </ul>

      <h5 class="card-title">User Albums</h5>

      <div class="row">
        <% @albums.each do |album| %>
          <div class="col-md-4 mb-4">
            <h5 class="card-title">
              <%= album['title'] %>
            </h5>

            <%= link_to "View Album", album_path(album['id']), class: "btn btn-primary" %>
          </div>
        <% end %>
      </div>

      <%= will_paginate @albums, renderer: WillPaginate::ActionView::BootstrapLinkRenderer, class: 'margin-auto' %>
    </div>
  </div>
</div>

users_controller.rb

class UsersController < ApplicationController
  def show
    @user = HTTParty.get('https://jsonplaceholder.typicode.com/users/' + params[:id], :headers => {'Content-Type' => 'application/json'})

    @albums = HTTParty
      .get('https://jsonplaceholder.typicode.com/albums', :headers => {'Content-Type' => 'application/json'})
      .paginate(:page => params[:page], :per_page => 6)
  end
end

Все мои данные поступают из внешнего API.

Где япросматривая альбом each Мне нужно только показать альбомы, принадлежащие этому пользователю, потому что в настоящее время я перебираю все альбомы независимо от того, принадлежат ли они этому пользователю или нет.

Альбом имеет идентификатор пользователя.

Ответы [ 3 ]

2 голосов
/ 23 октября 2019

Используйте .select , чтобы, ну, ну, выберите только те альбомы, для которых 'userId' альбома соответствует @user['id']:

class UsersController < ApplicationController
  def show
    @user = HTTParty.get('https://jsonplaceholder.typicode.com/users/' + params[:id], :headers => {'Content-Type' => 'application/json'})

    @albums = HTTParty
      .get(
        'https://jsonplaceholder.typicode.com/albums', 
        :headers => {'Content-Type' => 'application/json'}
      )
      .select{|a| a['userId'] == @user['id']}
      .paginate(:page => params[:page], :per_page => 6)
  end
end
0 голосов
/ 23 октября 2019

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

0 голосов
/ 23 октября 2019

В случае действия вашего контроллера, ответственного за показ этой страницы, вы должны сделать что-то вроде

@albums = Album.where(user_id: @user.id)

, чтобы при вызове @albums в вашем представлении он содержал только документы, предварительно загруженные в контроллер.

Или, если вы используете что-то вроде CanCan для управления разрешениями, вы должны иметь возможность сделать что-то вроде этого:

can :read, Album, user_id: user.id

Таким образом, вы будете давать read разрешает пользователю просматривать только те альбомы, которые ему принадлежат.

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