我使用的是rails 4.02。 (strong_params)
3个型号:
class Region < ActiveRecord::Base
has_many :cities
end
class City < ActiveRecord::Base
has_one :location
end
class Location < ActiveRecord::Base
belongs_to :city
end
查看:
- @region.cities.each do |city|
%ol
%li
%h4.block-title-5
= link_to city.name, country_region_city_path(city.region.country, city.region, city)
%p
= city.city_h2
%p
= city.location.latitude
我收到错误消息undefined method "latitude"
这是完整的痕迹:
activerecord (4.0.3) lib/active_record/relation/delegation.rb:13:in each' activerecord
(4.0.3) lib/active_record/relation/delegation.rb:13:in each' actionpack (4.0.3)
lib/action_view/template.rb:143:in block in render' activesupport (4.0.3)
lib/active_support/notifications.rb:161:in instrument' actionpack (4.0.3)
lib/action_view/template.rb:141:in render' actionpack (4.0.3)
lib/action_view/renderer/template_renderer.rb:49:in block (2 levels) in render_template'
我在这里做错了什么?感谢
答案 0 :(得分:1)
如果您的Location
模型确实具有latitude
属性,则此错误的最可能原因是您的数据库中有一些City
条记录的值为{{1 }}。您可以通过查看完整的异常消息来检查是否是这种情况,是否类似于?:
location
在这种情况下,您有两种选择,具体取决于您是否将NoMethodError: undefined method `latitude' for nil:NilClass
视为latitude
模型的必需属性。如果需要,则通过向City
模型添加验证规则来强制执行该规则:
City
并且可能是对数据库模式中的外键列的非null约束。
或者,如果您的应用程序中允许缺少validates :location, presence: true
值,则只需处理视图中的缺失值:
latitude