轨道上的重复动作模板错误红宝石

时间:2018-10-22 20:24:42

标签: ruby-on-rails ruby

我继续遇到此错误

  

ActionView :: Template :: Error(nil:NilClass的未定义方法“ each”):

这是我的show.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 :(得分:1)

您没有在show方法上声明@bookings变量,这说明了崩溃。似乎您在index方法的第一行中根据需要声明了它。只需更改声明位置,就可以了。

此外,为避免进一步的麻烦,您应该将set_booking方法重构为:

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

聋哑人.find()如果找不到任何内容,则会使您的视图崩溃

另一方面,

.find_by将返回一个空答案,因此不会崩溃。而且,它更具通用性,因为通过这种方式,您可以从模型中设置的众多其他变量(即name)中进行搜索。

答案 1 :(得分:0)

根据Rails控制器操作的约定(在您的情况下为indexshow),以相同的名称呈现视图,在您的情况下,它们可能是intex.html.erbshow.html.erb。在show方法中,您定义两个变量:@bed@booking,并在视图(show.html.erb)中尝试循环在控制器操作中未定义的变量@bookings 。因此,您将收到此错误。

在您列出预订及其信息时,您似乎需要将show.html.erb重命名为index.html.erb