在Rails中取消激活和激活模型

问题描述:

我想了解如何激活和取消激活轨道中的某个模型,而不必删除任何内容。在Rails中取消激活和激活模型

遇到此代码。

class User < ActiveRecord::Base 

def activate_account! 
    update_attribute :is_active, true 
end 

def deactivate_account! 
    update_attribute :is_active, false 
end 
end 

我对用户模型的理解是,有一个“is_active”列。

我的问题是如何布尔实际上导致对象被激活和停用。

我的意思是“is_active”实际上是Rails方法吗?还是定义在其他地方?当列设置为true或false时,似乎无法获知“激活/停用的魔力”。

+1

没有魔法。它将属性“is_active”设置为TRUE或FALSE。因此,您可以知道用户是否拥有“活动”帐户或不具有范围或方法。例如:'scope:inactive, - > {where(is_active:false)}''并用'User.all.inactive'检索所有非活动用户。 –

+0

我之所以希望停用特定模型(即评论)是因为我想隐藏它,而不是完全删除它。那么我该如何隐藏它? – RailsNewbie

+2

您可以为'active'创建类似的作用域。并选择仅显示活跃的“评论”。 'Comment.all.active'在你的控制器中,所以'inactive'注释保留在数据库中,但不在你的视图中。你明白这背后的概念? –

为了详细阐述Florrent Ferry非常正确的答案,您给出的代码作为示例是模型中的两个方法。

你会调用此您的手机型号,例如:current_user.deactivate_account!这将呼吁current_user的方法,并更新他们的帐户is_activefalse

因此,您可以通过将方法复制到您的评论模型,然后调用该特定评论的方法来实现与评论类似的内容。例如:@comment.deactivate_comment!这会将该注释的布尔值设置为false。

现在,如果您在控制器中使用类似@comments = Comment.all的东西,它仍然会显示,然后在您的视图中通过@comments进行循环。因为它仍然存在,所以所有人都会把它拉出来。但是,通过范围@comments实例,只能收集其活动状态为真的注释。

您可以直接在控制器中使用做到这一点:

@comments = Comment.where(is_active: true) 

但它会更好,范围以此为Florrent指出。例如,在你的模型,你会设置范围:

scope :active, -> { where(is_active: true) } 

然后在你的控制器,你可以简单地来电来访

@comment = Comment.all.active 
+0

感谢Florent和abbott567。编程新手。开始深深地爱上它。大声笑。 – RailsNewbie

+0

@RailsNewbie哈哈,rails对于学习编程来说太棒了......它可以为项目带来最好的运行效果 – abbott567