在我的rails应用程序中,我有一个collectionproxy,它是一个数组(我认为)的记录。我想从数组中间取一条记录并将其放在开头。我不知道项目的位置,但我可以使用用户模型的属性找到它。似乎有些方法无法在collectionproxy上使用。
我试过了:
var statusCellTemplate =
'<div class="ui-grid-cell-contents"><span ng-
if="row.entity.statusDetails.length>=2">[Multiple Statuses]</span><span ng-
if="row.entity.statusDetails.length<2">{{row.entity.statusDetails[0].status.name}}
</span></div>';
但得到了一个错误,我给了2个参数,但它预计1.我猜测因为在数组上使用的insert方法与collectionproxies上使用的方法不同。最好的方法是什么?
编辑:我只需要在视图中显示项目,我不需要在数据库级别进行更改。
答案 0 :(得分:2)
由于很少有方法可用于集合代理,首先将集合代理更改为数组,然后对其进行操作。
以下是执行此操作的代码,
user_images = user.images.to_a //converted collection to array
user_images.unshift(user_images.detect{ |image| image.id == user.primary_image_id}).uniq //used unshift
puts user_images
我们在这里所做的魔术是detect
用户的主要图像和unshift
到数组的图像
unshift在开头添加对象。
现在使用uniq。
这就是您所需的对象首先进入数组,您可以在视图中使用它,因为使用了活动记录集合。
答案 1 :(得分:0)
看起来目前无法添加到CollectionProxy
的开头。已删除prepend
和sort
方法。以下是已弃用的prepend
方法的API:
http://apidock.com/rails/v4.2.1/ActiveRecord/Associations/CollectionProxy/prepend
您可以稍微重新考虑一下,并使用append
或<<
运算符以及delete
将元素复制到集合的末尾,并从中间删除它们。它并不理想,但在您有更好的解决方案之前,它可能是一种解决方法。