在我的资产索引视图中,当它遍历每个时Asset
,我想显示最新的场景名称。我正在使用.last提取最新记录。当我检查返回的内容时,可以看到这些值。问题是,当我尝试访问所返回内容的属性之一时,会得到一个未定义的方法。
因此,例如,如果我这样做:
<%= (asset.scene_assignments.where(asset_id: asset).order("created_at").last).scene_id %>
我得到:
Assets#index未定义方法`scene_id'中的NoMethodError用于SceneAssignment:0x4bc2c28
但是,如果我调用#inspect
而不是#name
,我可以看到其中包含的内容。因此,如果我这样做:
<%= (asset.scene_assignments.where(asset_id: asset).order("created_at").last).inspect %>
它打印此:
SceneAssignment id:4,scene_id:3,asset_id:1,到达时间:nil,created_at:“ 2014-10-16 01:43:50”,updatedat:“ 2014-10-16 01:43:50”,location_id:1 ,asset_role_id:1
为什么我不能从返回的内容中访问属性之一?
在我的资产索引视图中,我有以下内容:
<% @assets.each do |asset| %>
<tr>
<td><%= asset.name %></td>
<td>
<%= (asset.scene_assignments.where(asset_id: asset).order("created_at").last).inspect %>
</td>
<td><%= link_to 'Show', asset %></td>
<td><%= link_to 'Edit', edit_asset_path(asset) %></td>
<td><%= link_to 'Destroy', asset, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
我在资产和场景之间的关系设置如下:
class SceneAssignment < ActiveRecord::Base
belongs_to :scene
belongs_to :asset
belongs_to :location
belongs_to :asset_role
belongs_to :incident
accepts_nested_attributes_for :asset
end
class Scene < ActiveRecord::Base
has_many :scene_assignments
has_many :assets, :through => :scene_assignments
belongs_to :incident
belongs_to :scene_type
accepts_nested_attributes_for :scene_assignments, :allow_destroy => true
end
class Asset < ActiveRecord::Base
has_many :scene_assignments
has_many :scenes, :through => :scene_assignments
end
我相信是.scene_id
,不是.last
造成您的错误。.where(…)的结果是记录的集合,而不是单个记录。
为了解决这个问题,您可以说,asset.scene_assignments.where(asset_id: asset).order("created_at").last).first.scene_id
尽管这会使一些相当混乱的代码变得更糟。:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句