一种更新对象属性的简洁方法?

时间:2011-06-23 22:16:44

标签: ruby-on-rails ruby ruby-on-rails-3

我想做这样的事情:

假设:

@user1
@user2

Post模型的位置(id,user_id)

@posts = @user1.posts

我想获取user1的所有帖子,并将user_id设置为@ user2

有一种简单的单行方式吗?或者我是否必须遍历所有@posts并更新属性并保存记录?

由于

2 个答案:

答案 0 :(得分:4)

您可以在Post类上使用类方法update_all来完成此操作。传递的第一个字符串本质上是SQL更新语句的SET子句,第二个字符串是WHERE子句。

Post.update_all("user_id = #{@user2.id}", "user_id = #{@user1.id}")

答案 1 :(得分:2)

我使用_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的post id数组分配给@ user2的post id。