[Rails] 關聯的 model 發生 nil 錯誤狀況處理方式
前言
關聯的 model 發生 nil 錯誤狀況處理方式。 因為實作時常發生此狀況,特此紀錄
狀況
有兩個Model為1對多的關聯,如Event及Category
class Event < ActiveRecord::Base
belongs_to :category
end
class Category < ActiveRecord::Base
has_many :events
end
在template輸出
<%= @event.category.name %>
常會發生 @event.category
可能是 nil,這會導致 nil.name
發生錯誤。
解法1
一個簡單的方式是改使用try(:xxx)
<%= @event.category.try(:name) %>
<%= @event.category.try(:name).try(:XXX) %> #以此類推往下要繼續加try..
解法2
另一招則是在 Event model 加入以下程式,就會有 @event.category_name 可以使用,而且允許 @event.category 是 nil。
class Event < ActiveRecord::Base
delegate :name, :to => :category, :prefix => true, :allow_nil => true
end
在template裡面只要輸入如下程式,而不會跳錯誤。
<%= @event.category_name %>
或
<%= @event.category.name %>
留言