我试图了解如何在rails中激活和停用某个Model而不必删除任何内容。
遇到此代码。
class User < ActiveRecord::Base
def activate_account!
update_attribute :is_active, true
end
def deactivate_account!
update_attribute :is_active, false
end
end
我理解用户模型中有一个&#34; is_active&#34;列。
我的问题是这个布尔值是如何实际导致对象被激活和停用的。
我的意思是&#34; is_active&#34;一个实际的Rails方法?还是在其他地方定义?似乎无法了解激活/停用&#34;魔法的激活/停用&#34;当列设置为true或false时发生。
答案 0 :(得分:1)
详细说明Florrent Ferry的正确答案,您给出的代码是模型中的两种方法。
您可以在模型上调用此方法,例如:current_user.deactivate_account!
这会调用current_user
上的方法,并将其帐户中的is_active
列更新为false
因此,您可以通过将方法复制到Comment模型中,然后在该特定注释上调用方法来实现与注释类似的操作。例如:@comment.deactivate_comment!
这会将该注释的布尔值设置为false。
现在,如果您在控制器中使用@comments = Comment.all
之类的内容,然后在视图中循环浏览@comments
,它仍会显示出来。因为它仍然存在,所以ALL会把它拉出来。但是,通过确定@comments
实例的范围,您只能收集活动为真的注释。
您可以使用以下方法直接在控制器中执行此操作:
@comments = Comment.where(is_active: true)
但是,正如弗洛伦特指出的那样,最好将其范围扩大。例如,在您的模型中,您将设置范围:
scope :active, -> { where(is_active: true) }
然后在您的控制器中,您只需致电
@comment = Comment.all.active