我继续遇到此错误
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
有什么建议吗?还是我看不到的东西?目前,我已经尝试了几乎所有我能想到的东西。谢谢!
答案 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控制器操作的约定(在您的情况下为index
和show
),以相同的名称呈现视图,在您的情况下,它们可能是intex.html.erb
和show.html.erb
。在show方法中,您定义两个变量:@bed
和@booking
,并在视图(show.html.erb
)中尝试循环在控制器操作中未定义的变量@bookings
。因此,您将收到此错误。
在您列出预订及其信息时,您似乎需要将show.html.erb
重命名为index.html.erb
。