少於 1 分鐘閱讀

前言

關聯的 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 %>

參考

  1. https://ihower.tw/rails4/restful-practices.html

標籤: ,

分類:

更新時間:

留言