Rails:如何在降低用户级别后公开私人帖子?

时间:2015-04-28 03:53:43

标签: ruby-on-rails ruby ruby-on-rails-4.2

我是RoR的新用户,在此应用中,我想在用户取消付费服务后公开私人帖子。换句话说,在用户将帐户级别降级为标准后,用户的私人帖子将会公开。

以下是我如何处理这种情况:

SubscriptionsController:

def downgrade
    subscription = current_user.subscription

    if subscription.delete
      downgrade_user_to_standard
      current_user_downgrade_posts
      flash[:success] = "Sorry to see you go."
      redirect_to user_path(current_user)
    else
      flash[:error] = "Can't downgrade at this moment."
      redirect_to root_path
    end
  end

的ApplicationController:

protected

def downgrade_user_to_standard
     current_user.update_attributes(role: "standard")
   end

   def current_user_downgrade_posts
    privateposts = current_user.posts.where(private: true)
    privateposts.each do |privatepost|
      privatepost.posts_update_attributes(private: false)
    end
   end 

当我在服务器和控制台上测试它时,我发现先前创建的私人帖子在将高级用户降级到标准级别后未按预期公开。 由于当我运行rails服务器时没有错误消息,有人能指出我错过了哪些步骤以及如何使其工作?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

我不认为代码应该在控制器中,但是......

你应该改变:

privatepost.posts_update_attributes(private: false)

使用:

privatepost.update_attribute(:private, false)

如果您不关心验证,回调和触摸时间戳,那么您可以删除循环并使用:

current_user.posts.where(private: true).update_all(private: false)