Advertisement
Guest User

Untitled

a guest
Apr 19th, 2014
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.19 KB | None | 0 0
  1. class User < ActiveRecord::Base
  2. # id:integer name:string deleted:boolean
  3.  
  4. has_many :posts
  5. end
  6.  
  7. class Post < ActiveRecord::Base
  8. # id:integer user_id:integer content:string deleted:boolean
  9.  
  10. belongs_to :user
  11. end
  12.  
  13. class Post < ActiveRecord::Base
  14. # id:integer user_id:integer content:string deleted:boolean
  15.  
  16. belongs_to :user
  17.  
  18. def administrated_content
  19. if !self.deleted
  20. self.content
  21. else
  22. "This post has been removed"
  23. end
  24. end
  25. end
  26.  
  27. class State
  28. #id:integer #deleted:boolean #deleted_by:integer
  29.  
  30. belongs_to :user
  31. belongs_to :post
  32. end
  33.  
  34. class Post < ActiveRecord::Base
  35. scope :not_deleted, lambda { where(deleted_at: nil) }
  36. scope :deleted, lambda { where("#{self.table_name}.deleted_at IS NOT NULL") }
  37.  
  38. def destroy
  39. self.update_attributes(deleted_at: DateTime.current)
  40. end
  41.  
  42. def delete
  43. destroy
  44. end
  45.  
  46. def deleted?
  47. self.deleted_at.present?
  48. end
  49. # ...
  50.  
  51. # lib/extensions/act_as_fake_deletable.rb
  52. module ActAsFakeDeletable
  53. # override the model actions
  54. def delete
  55. self.update_attributes(:deleted_at, DateTime.current)
  56. end
  57. def destroy
  58. self.update_attributes(:deleted_at, DateTime.current)
  59. end
  60.  
  61. # define new scopes
  62. def self.included(base)
  63. base.class_eval do
  64. scope :deleted, where('deleted_at IS NOT NULL')
  65. scope :not_deleted, where('deleted_at IS NULL')
  66.  
  67. scope :destroyed, where('deleted_at IS NOT NULL')
  68. scope :not_destroyed, where('deleted_at IS NULL')
  69. end
  70. end
  71. end
  72.  
  73. class ActiveRecord::Base
  74. def self.act_as_fake_deletable(options = {})
  75. alias_method :destroy!, :destroy
  76. alias_method :delete!, :delete
  77. include ActAsFakeDeletable
  78.  
  79. options = { field_to_hide: :content, message_to_show_instead: "This content has been deleted" }.merge!(options)
  80.  
  81. define_method options[:field_to_hide].to_sym do
  82. return options[:message_to_show_instead] if self.deleted_at.present?
  83. self.read_attribute options[:field_to_hide].to_sym
  84. end
  85. end
  86. end
  87.  
  88. class Post < ActiveRecord::Base
  89. act_as_fake_deletable
  90.  
  91. class Book < ActiveRecord::Base
  92. act_as_fake_deletable field_to_hide: :title, message_to_show_instead: "This book has been deleted man, sorry!"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement