客户端有许多状态。要获得最新状态,我在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