Rails ActiveRecord, идентификатор пользователя, получающий список данных - PullRequest
0 голосов
/ 04 июня 2019

Не уверен, что этот вопрос ясен, так как я пытаюсь найти правильное слово для ясного ответа на вопрос

Я работаю над активной записью Rails, пытаясь получить список данных, которыми владеет пользователь.

На данный момент страницы отображаются так, как вы можете видеть на скриншоте "Больше оборудования принадлежит Ashford tools Hire enter image description here

это должно показать 5 разных инструментов, но я, кажется, не могу получить их, я могу получить все данные на дисплее, но не могу получить список инструментов пользователя, кажется, я пропустил одну или две мелочи

вот код, который я написал.

      <!-- More equipment from owner -->
  <div class="row">
    <h3>More equipment own by <strong><%= @tool.user.company %></strong></h3>
    <div class="col-md-2">
      <div class="panel panel-default">
        <div class="panel-heading preview">
          <%= image_tag @tool.images.first, class:"imgnear" if  @tool.images.attached? %>
        </div>
        <div class="panel-body">
          <%= link_to @tool.brand, target: :_blank %><br />
        </div>
      </div>
    </div>
  </div>

Я попробовал функцию «каждый выполняет», но получаю ошибку

Я сделал current_user, но это не практически

<!-- More equipment from owner -->
  <div class="row">
    <h3>More equipment own by <strong><%= @tool.user.company %></strong></h3>
    <% current_user.tools.each do |tool| %>
    <div class="col-md-2">
      <div class="panel panel-default">
        <div class="panel-heading preview">
          <%= image_tag tool.images.first, class:"imgnear" if  tool.images.attached? %>
        </div>
        <div class="panel-body">
          <%= link_to tool.brand, tool, target: :_blank %><br />

        </div>
      </div>
    </div>
    <% end %>
  </div>

в контроллере инструментов

  def index
    @tools = current_user.tools

  end

  def new
    @tool = current_user.tools.build
  end

1 Ответ

1 голос
/ 04 июня 2019

Я считаю, что на этом экране отображается действие ToolsController#show, а не ToolsController#index. Вероятно, ваш show метод выглядит следующим образом:

def show
  @tool = Tool.find(params[:id])
end

или аналогично.

Для отображения других инструментов вам необходимо присвоить их некоторой переменной внутри того же действия контроллера. Что вы можете сделать, это:

def show
  @tool = Tool.find(params[:id]) # or however that line looks
  @other_tools = @tool.user.tools.where("id != ?", @tool.id)
end

Таким образом, @other_tools будет состоять из всех инструментов, принадлежащих владельцу выбранного инструмента, но исключит выбранный инструмент (в противном случае внутри «также принадлежащего» вы можете увидеть тот же инструмент, что отображается над списком)

Еще одна вещь, когда вы делаете current_user.tools в своем представлении, вы отображаете владельца элементов пользователем, который вошел в систему, а не пользователем, который владеет основным отображаемым инструментом, вы можете не увидеть ошибку, если войдете как владелец, но если вы войдете в систему как другой пользователь, вы увидите, что в списке отображаются неправильные инструменты.

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