我正在尝试访问我的污垢/索引页面,但我收到此错误,如下图所示。
所以我在#total_trip_miles中放了一个byebug来看看发生了什么:
class Driver < ApplicationRecord
has_many :dirts
validates :name, presence: true, uniqueness: true
def total_trip_miles
byebug
collect_trip_miles.round.to_s
end
def average_speed
total_distance = collect_trip_miles
total_rate = collect_trip_seconds
((total_distance/total_rate)*3600).round
end
def collect_trip_miles
dirts.map do |trip|
trip.distance.to_f
end.inject(:+)
end
def collect_trip_seconds
seconds = []
dirts.map do |trip|
seconds << trip.change_in_time(trip.start_time, trip.end_time)
end
seconds.inject(:+)
end
end
当我从byebug拨打collect_trip_miles.round.to_s
时,我得到了"55"
,这正是我想通过我的规范:
我在#drivers
:
dirt/index.html.erb
中的方法
<ul id="trips">
<% drivers.each do |driver| %>
<li>
<article class="driver">
<header>
<h2><%= show_name_of(driver) %></h2>
</header>
<p>
<%= "#{show_total_miles_of(driver)} Miles" %>
</p>
<table>
</table>
<footer>
</footer>
</article>
</li>
<% end %>
</ul>
这些方法是从我的app/helpers/dirts_helper.rb
module DirtsHelper
def show_name_of(driver)
the_driver(driver).name.capitalize
end
def show_total_miles_of(driver)
the_driver(driver).total_trip_miles
end
def the_driver(driver)
Driver.find(driver.first)
end
def drivers
@driver_store = {}
@drivers.each_with_index do |driver, dirts|
@driver_store[driver.id] = driver.dirts
end
@driver_store
end
end
然后控制器操作来自app/controllers/dirts_controller.rb
class DirtsController < ApplicationController
def index
@drivers = Driver.all
end
end
基于我所描述和展示的证据,我的驾驶员模型的方法是否会爆炸,是否有一些超级显而易见的我应该为自己感到羞耻的原因我的localhost但是调试按预期报告了吗?
答案 0 :(得分:0)
可能是这个吗?
def the_driver(driver)
Driver.find(driver.first)
end
您正在视图中迭代drivers.each do |driver|
,当您将其传递到show_total_miles_of
然后再传递到the_driver
时,您不应该find
,因为您是已经处理了一个对象的单个实例。
答案 1 :(得分:0)
我犯了一个错误,就是在我的司机系列中没有防范零,其中一些人没有任何行程里程。因此,在没有任何东西的情况下调用#round会引发错误,但它在ByeBug中起作用,因为这只是捕获集合中的一个项目,恰好也有英里数,所以在Float上调用#round工作。