在Rails中停用并激活模型

时间:2015-05-09 10:09:53

标签: ruby-on-rails

我试图了解如何在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时发生。

1 个答案:

答案 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