【发布时间】:2011-06-24 06:57:15
【问题描述】:
我想做这样的事情:
鉴于:
@user1
@user2
Post 模型的位置 (id, user_id)
@posts = @user1.posts
我想获取user1的所有帖子,并将user_id设置为@user2
有没有一种简单的方法可以做到这一点?还是我必须遍历所有@posts 并更新属性并保存记录?
谢谢
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3
我想做这样的事情:
鉴于:
@user1
@user2
Post 模型的位置 (id, user_id)
@posts = @user1.posts
我想获取user1的所有帖子,并将user_id设置为@user2
有没有一种简单的方法可以做到这一点?还是我必须遍历所有@posts 并更新属性并保存记录?
谢谢
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3
您可以在 Post 类上使用类方法 update_all 来完成此操作。传递的第一个字符串本质上是 SQL 更新语句的 SET 子句,第二个字符串是 WHERE 子句。
Post.update_all("user_id = #{@user2.id}", "user_id = #{@user1.id}")
【讨论】:
我为此使用_ids 属性。
@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。
【讨论】: