Повторяющаяся ошибка шаблона действия ruby ​​на рельсах - PullRequest
0 голосов
/ 22 октября 2018

Я продолжаю иметь эту ошибку

ActionView :: Template :: Error (неопределенный метод `each 'для nil: NilClass):

Вот мое шоу.html.erb

<% @bookings.each do |booking| %>
  <% if booking.checkin_on > Date.today %>
  <% if booking.status == "Confirmed" %>
  <li class="dashboard">
  <%= cl_image_tag(booking.bed.photo.path, width: 400, height: 300, crop: :fill, class: "pdt-image hidden-xs" ) %>
  <div class='product-body'>
    <h2><%= booking.bed.title %></h2>
    <p>City: <strong><%= booking.bed.city %></strong></p>
    <p>Address: <strong><%= booking.bed.address %></strong></p>
    <p>Total price: <strong><%= booking.value %> €</strong></p>
  </div>
  <div>
    <ul class="list-unstyled hidden-sm hidden-xs padded">
      <li><strong>Your booking is confirmed !</strong></li>
      <li class="text-right"><%= link_to "Delete this booking", booking_path(booking), method: :delete, class:"btn btn-default", data: {confirm: "Are you sure"} %> </li>
    </ul>
  </div>
  </li>
  <% end %>

  <% if booking.status == "Canceled" %>
  <li class="dashboard">
  <%= cl_image_tag(booking.bed.photo.path, width: 400, height: 300, crop: :fill, class: "pdt-image hidden-xs" ) %>
  <div class='product-body'>
    <h2><%= booking.bed.title %></h2>
    <p>City: <strong><%= booking.bed.city %></strong></p>
    <p>Address: <strong><%= booking.bed.address %></strong></p>
    <p>Total price: <strong><%= booking.value %> €</strong></p>
  </div>
  <div>
    <ul class="list-unstyled hidden-sm hidden-xs padded">
      <li><p><%= booking.bed.user.first_name%> canceled your booking </p></li>
    </ul>
  </div>
  </li>
  <% end %>
  <% end %>

<% end %>

А вот мой контроллер my_bookings

class My::BookingsController < ApplicationController
  def index
   @bookings = Booking.where(user_id: current_user.id)
   @bookings = Booking.all
   @beds = Bed.all
  end

  def show
   set_booking
   @bed = @booking.bed
  end

private
 def set_booking
  @booking = Booking.find(params[:id])
 end
end

Есть предложения?Или что-то, чего я не вижу?Я перепробовал почти все, что могу придумать на данный момент.Спасибо!

Ответы [ 2 ]

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

По соглашению в действиях контроллера Rails (index и show в вашем случае) визуализируются представления с одинаковыми именами, в вашем случае это могут быть intex.html.erb и show.html.erb.В вашем методе show вы определяете две переменные: @bed и @booking, а на ваш взгляд (show.html.erb) вы пытаетесь зациклить переменную @bookings, которую вы не определили в действии вашего контроллера.Таким образом, вы получаете эту ошибку.

Похоже, вам нужно переименовать show.html.erb в index.html.erb, поскольку вы перечисляете бронирования и их информацию в нем.

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

Вы не объявляете переменную @bookings в вашем методе show, который объясняет сбой.Похоже, вы объявляете это так, как хотели в первой строке вашего index метода.Просто измените место, где вы его объявите, и все будет в порядке.

Кроме того, чтобы избежать дальнейших головных болей, вам следует изменить метод set_booking на:

def set_booking
 @booking = Booking.find_by(id: params[:id])
end

по умолчанию .find()с другой стороны, вылетит ваш взгляд, если он ничего не найдет

.find_by, с другой стороны, вернет пустой ответ, поэтому он не вылетит.Кроме того, он более универсален, поскольку таким образом вы можете искать из множества других переменных, установленных в вашей модели, например, name.

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