2014-09-23 63 views
0

我使用rails 4.02。 (strong_params)嵌套資源中的未定義方法has_one

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' 

Wha我在這裏做錯了嗎?由於

+0

做'位置/ Location''表/ model'有任何'latitude'列/屬性 – 2014-09-23 08:07:55

+0

你的代碼沒有什麼不對。請更新完整的錯誤跟蹤。在城市中添加「belongs_to:region」。還有一件事你應該在位置表中使用city_id以使其工作' – 2014-09-23 08:09:43

+0

是位置表具有屬性寬容度。我更新了日誌 – Remco 2014-09-23 08:35:44

回答

1

如果您Location模式真的有latitude屬性,這個錯誤最可能的原因是,你有一些City記錄在數據庫中具有零值location。您可以檢查是否在此通過查看完整的異常信息的情況下,是不是有點像?:

NoMethodError: undefined method `latitude' for nil:NilClass 

在這種情況下,你有這取決於你是否考慮latitude兩個選擇是一個必需的屬性爲您City型號與否。如果其所需然後通過添加驗證規則到你的City模型強制執行規則:

validates :location, presence: true 

也許NOT NULL約束在數據庫模式外鍵列。

另外,如果缺少latitude值允許在你的應用程序,你可以只處理視圖中的缺失值:

= city.location.try(:latitude) 
+0

您的wright steve ...有一些無零值的記錄。謝謝..現在工作! – Remco 2014-09-23 11:41:18