我是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服务器时没有错误消息,有人能指出我错过了哪些步骤以及如何使其工作?
提前谢谢!
答案 0 :(得分:0)
我不认为代码应该在控制器中,但是......
你应该改变:
privatepost.posts_update_attributes(private: false)
使用:
privatepost.update_attribute(:private, false)
如果您不关心验证,回调和触摸时间戳,那么您可以删除循环并使用:
current_user.posts.where(private: true).update_all(private: false)