客戶端有許多狀態。要獲得最新狀態,我在Status
上使用了以下範圍。在.last中使用範圍正在返回查看關聯關係
scope :latest, -> { order(:created_at).last }
這在Rails控制檯中按預期工作。
client = Client.last
client.statuses.latest
=> #<Status id:...
client.statuses.latest.stage
=> 1
但是,它在視圖中無法正常工作。 (這是f.object
是Client
對象的動態表單的一部分)。
<%= f.object.statuses.latest.inspect %>
這將返回如預期的那樣Status
對象:#<Status id:...
但如果我現在嘗試在對象上訪問屬性,<%= f.object.statuses.latest.stage %>
我碰到下面的錯誤。
undefined method `stage' for #<ActiveRecord::AssociationRelation []>
哪扔了我,因爲它應該是Status
對象。加上我的困惑,如果我嘗試一個不存在的屬性,如<%= f.object.statuses.latest.foobar %>
,我得到以下錯誤。
undefined method `foobar' for #<Status:0x007ff615fcdb28>
更新
我試圖設置一個Client
對象爲控制器以測試一個實例變量,它按預期工作。這個問題似乎只在通過表單對象訪問Client
時纔會發生。
這是一個錯誤或某種限制?無論如何圍繞它?
更新2
找到一種方法來解決這個問題。
<%= f.object.statuses.latest.stage unless f.object.statuses.latest.blank? %>
我不明白爲什麼這個工程,因爲最新的不是空白,並返回一個階段,因此,如果任何人都可以解釋,將不勝感激。
奇怪。 「stage」是一個屬性,還是「狀態」中的方法?你能提供嗎? – dgilperez 2015-02-11 17:15:43
'stage'只是'Status'上的一個屬性,它在控制檯中按照預期返回一個整數。 – steharro 2015-02-11 17:18:33