0

我的表演动作如下:

def show
  @car = Car.friendly.find(params[:id])
  @cars = @car.other_cars_in_showroom
end

采用适当方法的我的汽车模型是:

def other_cars_in_showroom
  cars = self.showroom.cars
  cars.delete(self)
  cars
end

我的问题是,上述工作正常并且页面呈现正常,但是,在页面刷新后我得到:

nil:NilClass 的未定义方法“汽车”

错误self.showroom.cars在线。我该如何解决这个问题?我所需要的只是检索同一陈列室中所有其他汽车的列表,@car然后从列表中删除当前展示的汽车,以减少重复。

在我看来,我正在@cars为他们每个人呈现这个视图:

<div class="car__photo">
  <div class="car__photo-inner">
    <%= image_tag car.s3_photo(:thumb), class: 'styled-picture' %>
  </div>
</div>

<div class="car__info">
  <h4 class="car__info__name"><%= car.name %></h4>
  <p class="car__info__park"><%= car.park_name %></p>
</div>

<%= link_to car.name + ' at ' + car.showroom_name, car_path(car), class: 'car__link' %>

我的预期输出是@cars 是与@car 在同一陈列室中但没有@car 本身的所有汽车的列表。

4

1 回答 1

1

您会收到undefined method 'cars' for nil:NilClass错误,因为cars.delete(self)实际上是从数据库中删除当前汽车。

def other_cars_in_showroom
  cars = self.showroom.cars
  cars.delete(self) ## Fires delete query for self(deletes current car)
  cars
end

如下更新显示动作,以获取所选汽车陈列室中除所选汽车之外的所有其他汽车:

def show
  @car = Car.friendly.find(params[:id])
  @cars = @car.other_cars_in_showroom
end

更新other_cars_in_showroom如下:

def other_cars_in_showroom
  showroom.cars.where.not(id: self.id)
end
于 2014-03-18T22:56:59.903 回答