2015-05-09 137 views
0

我想了解如何激活和取消激活軌道中的某個模型,而不必刪除任何內容。在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'註釋保留在數據庫中,但不在你的視圖中。你明白這背後的概念? –

回答

1

爲了詳細闡述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