2

I have a Rails view which I would like to receive a list of ids from the controller and make a photo box for each ID. My current code receives the list and creates a box for each one perfectly fine, but any time I try to output or display the variable it acts like the variable is empty.

Controller

def index
  @photos = Photo.all
  @photo_ids = Feed.find(4).approved_contents
  @ids = @photos.ids.as_json
  Rails.logger.info(Feed.find(4).approved_contents.ids.as_json)
end

Template

<p id="notice"><%= notice %></p>
<h1>Listing Photos</h1>
<br>
<div class="row">
  <% @photos.each do |photo| %> 
  <div class="col-sm">
    <div class="card" style="width: 18rem;">
      <img class="card-img-top" src="/content/46/display" alt="Card image cap">
      <div class="card-body">
        <p class="card-text">
          <% photo.inspect %>
        </p>
      </div>
    </div>
  </div>
  <% end %>
</div>
<% @photos.length %>
<%= link_to 'New Photo', new_photo_path %>

Output HTML

<!DOCTYPE html>
<html>
<head>
  <title>Concerto picvote</title>
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/css/bootstrap.min.css" integrity="sha384-Smlep5jCw/wG7hdkwQ/Z5nLIefveQRIY9nfy6xoR1uRYBtpZgI6339F5dgvm/e9B" crossorigin="anonymous">
  <link rel="stylesheet" media="all" href="/stylesheets/concerto_picvote/application.css" />
  <script src="/javascripts/concerto_picvote/application.js"></script>
</head>
<body>

<p id="notice"></p>
<h1>Listing Photos</h1>
<br>
<div class="row">
  <div class="col-sm">
    <div class="card" style="width: 18rem;">
      <img class="card-img-top" src="/content/46/display" alt="Card image cap">
      <div class="card-body">
        <p class="card-text">
        </p>
      </div>
    </div>
  </div>
  <div class="col-sm">
    <div class="card" style="width: 18rem;">
      <img class="card-img-top" src="/content/46/display" alt="Card image cap">
      <div class="card-body">
        <p class="card-text">
        </p>
      </div>
    </div>
  </div>
  <div class="col-sm">
    <div class="card" style="width: 18rem;">
      <img class="card-img-top" src="/content/46/display" alt="Card image cap">
      <div class="card-body">
        <p class="card-text">
        </p>
      </div>
    </div>
  </div>
  <div class="col-sm">
    <div class="card" style="width: 18rem;">
      <img class="card-img-top" src="/content/46/display" alt="Card image cap">
      <div class="card-body">
        <p class="card-text">
        </p>
      </div>
    </div>
  </div>
  <div class="col-sm">
    <div class="card" style="width: 18rem;">
      <img class="card-img-top" src="/content/46/display" alt="Card image cap">
      <div class="card-body">
        <p class="card-text">
        </p>
      </div>
    </div>
  </div>
</div>
<a href="/vote/photos/new">New Photo</a>

<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/js/bootstrap.min.js" integrity="sha384-o+RDsa0aLu++PJvFqy8fFScvbHFLtbvScb8AjopnFD+iEQ7wo/CG0xlczd+2O/em" crossorigin="anonymous"></script>
</body>
</html>

Thanks!

sky
  • 145
  • 3
  • 8

1 Answers1

4

You need to replace

      <% photo.inspect %>

with

      <%= photo.inspect %>

see this answer.

davetapley
  • 17,000
  • 12
  • 60
  • 86