Ruby on rails 日期类型的列将不显示“日期”;未定义的方法`到格式化的';对于nil:NilClass“;在轨
我正在显示一个名为Show的模型中的数据库数据,该模型具有以下列:Ruby on rails 日期类型的列将不显示“日期”;未定义的方法`到格式化的';对于nil:NilClass“;在轨,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在显示一个名为Show的模型中的数据库数据,该模型具有以下列: id: integer, title: string, show_date: date, description: text, ticket_cost: string, location: string, created_at: datetime, updated_at: datetime 控制器通过以下方式访问每个Show实例: @shows = Show.all.order(:show_date) 该视图使用以下方式显示
id: integer, title: string, show_date: date, description: text, ticket_cost: string, location: string, created_at: datetime, updated_at: datetime
控制器通过以下方式访问每个Show实例:
@shows = Show.all.order(:show_date)
该视图使用以下方式显示信息:
<% @shows.each do |show| %>
<h4><%= show.title %></h4>
<h5><span class="glyphicon glyphicon-map-marker"></span><%= show.location %></h5>
<h5><span class="glyphicon glyphicon-calendar"></span><%= show.show_date.to_formatted_s(:long_ordinal) %></h5>
<h5><span class="glyphicon glyphicon-usd"></span><%= show.ticket_cost %></h5>
<h5><%= show.description %></h5>
<% end %>
我猜有时候你的约会真的是零。。。这有时会发生在旧的测试数据挂起的情况下。您可以使用try来暂时解决此问题,例如:
show.show_date.try(:to_formatted_s, :long_ordinal)
这将帮助您停止看到此错误。。。也许还可以获得更多关于导致问题的数据的详细信息
我还建议添加一些日志语句,以便更好地查看数据(就在修复错误的时候)。。。例如:
查看您正在获取的所有数据,并可能发现错误的数据。我尝试了try(:to_格式化,:long_序数)方法,在这种情况下,信息不会显示,但至少会加载视图,而不会抛出错误。我添加了一些调试语句,作为对原始帖子的编辑,但仍然卡住了。谢谢你的建议!对这就是try将要做的——它将允许bug在您调试时暂时停止发生——这样您就可以进行一些调试。肯定不会修复坏数据(如果这是问题的话):)好的,所以没有日期的是导致错误的原因,正如您在问题中所述。。。它将杀死整个页面。这就是为什么您需要
尝试。然而,为了找出其他日期没有显示的原因。。。我们需要更多的信息。比如说,你的模特在展示日期上有什么特别之处吗?在您的模型中是否使用了和重写方法(例如)?如果是的话,你能给我们看一下代码吗?你能在你的代码库中搜索show_date
,看看有没有其他特别的东西对它做了什么吗?@TarynEast在尝试一百万件事情的混乱中,有些事情奏效了,我不确定它是什么,但我想这是因为编辑了一个没有日期的条目。谢谢你的帮助,非常感谢他-你不喜欢这样的修复吗。。。“我不知道我修好了什么,但它现在正在工作,所以我会慢慢后退……”:D
--- !ruby/object:Show
raw_attributes:
id: 3
title: Show 3
show_date: 2017-03-05
description: Show 3 description
ticket_cost: "$3"
location: Show 3 location
created_at: &2 2017-02-05 21:19:15.000000000 Z
updated_at: &4 2017-02-05 21:19:15.000000000 Z
attributes: !ruby/object:ActiveRecord::AttributeSet
attributes: !ruby/object:ActiveRecord::LazyAttributeHash
delegate_hash:
id: !ruby/object:ActiveRecord::Attribute::FromDatabase
name: id
value_before_type_cast: 3
type: !ruby/object:ActiveModel::Type::Integer
precision:
scale:
limit: 4
range: !ruby/range
begin: -2147483648
end: 2147483648
excl: true
original_attribute:
title: !ruby/object:ActiveRecord::Attribute::FromDatabase
name: title
value_before_type_cast: Show 3
type: &1 !ruby/object:ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter::MysqlString
precision:
scale:
limit: 255
original_attribute:
show_date: !ruby/object:ActiveRecord::Attribute::FromDatabase
name: show_date
value_before_type_cast: 2017-03-05
type: !ruby/marshalable:ActiveRecord::AttributeMethods::TimeZoneConversion::TimeZoneConverter
:__v2__: []
[]: &3 !ruby/object:ActiveRecord::Type::DateTime
precision: 0
scale:
limit:
original_attribute:
description: !ruby/object:ActiveRecord::Attribute::FromDatabase
name: description
value_before_type_cast: Show 3 description
type: !ruby/object:ActiveModel::Type::Text
precision:
scale:
limit: 65535
original_attribute:
ticket_cost: !ruby/object:ActiveRecord::Attribute::FromDatabase
name: ticket_cost
value_before_type_cast: "$3"
type: *1
original_attribute:
location: !ruby/object:ActiveRecord::Attribute::FromDatabase
name: location
value_before_type_cast: Show 3 location
type: *1
original_attribute:
created_at: !ruby/object:ActiveRecord::Attribute::FromDatabase
name: created_at
value_before_type_cast: *2
type: !ruby/marshalable:ActiveRecord::AttributeMethods::TimeZoneConversion::TimeZoneConverter
:__v2__: []
[]: *3
original_attribute:
updated_at: !ruby/object:ActiveRecord::Attribute::FromDatabase
name: updated_at
value_before_type_cast: *4
type: !ruby/marshalable:ActiveRecord::AttributeMethods::TimeZoneConversion::TimeZoneConverter
:__v2__: []
[]: *3
original_attribute:
new_record: false
active_record_yaml_version: 1
show.show_date.try(:to_formatted_s, :long_ordinal)
<%= @shows.inspect %>