一种更新对象间属性的干净方法?

问题描述

| 我想做这样的事情: 鉴于:
@user1
@user2
Post模型所在的位置(id,user_id)
@posts = @user1.posts
我想接受user1的所有帖子,并将user_id设置为@ user2 有一种简单的方法可以做到这一点吗?还是我必须遍历所有@posts并更新属性并保存记录? 谢谢     

解决方法

        您可以在Post类上使用类方法
update_all
完成此操作。传递的第一个字符串本质上是SQL更新语句的SET子句,第二个字符串是WHERE子句。
Post.update_all(\"user_id = #{@user2.id}\",\"user_id = #{@user1.id}\")
    ,        我为此使用“ 4”属性。
@user2.update_attribute(:post_ids,@user1.post_ids)
更多说明 如果您输入
@user1.post_ids # --> [1,2,3,4]
您将获得用户连接到的所有帖子的所有ID的数组。 您也可以通过这种方式设置关系
@user2.post_ids = [1,2] 
@user2.save
因此,要解决您的问题,我只需将@ user1的帖子ID数组分配给@ user2的帖子ID。