article.rb 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. # encoding:utf-8
  2. require 'uuid'
  3. class Article < ActiveRecord::Base
  4. has_paper_trail
  5. self.table_name = "articles"
  6. after_destroy :after_destroy
  7. belongs_to :article_cat
  8. validates :title,:content,:article_cat_id,presence: true
  9. attr_accessor :v_cover
  10. attr_accessor :v_s_img
  11. IMG_STORE_PATH = "articles"
  12. STATE_ENUM = [["是",1],["否",0]]
  13. DISPLAY_COVER_ENUM = [["显示",1],["不显示",0]]
  14. rails_admin do
  15. navigation_label '文章栏目管理'
  16. weight -240
  17. list do
  18. filters [:id,:source,:title]
  19. # include_all_fields
  20. field :id
  21. field :title
  22. field :subtitle
  23. field :about
  24. # field :content
  25. field :cover do
  26. formatted_value do
  27. bindings[:view].tag(:img, {:src => bindings[:object].get_img,
  28. :style => 'width: 100px;height: 100px;cursor: pointer;display: block;max-width: 100px;',
  29. :onClick => "javascript:window.open('#{bindings[:object].get_img}')"})
  30. end
  31. end
  32. field :s_img do
  33. formatted_value do
  34. bindings[:view].tag(:img, {:src => bindings[:object].get_s_img,
  35. :style => 'width: 100px;height: 100px;cursor: pointer;display: block;max-width: 100px;',
  36. :onClick => "javascript:window.open('#{bindings[:object].get_s_img}')"})
  37. end
  38. end
  39. field :source
  40. field :editor
  41. field :click
  42. field :sort
  43. field :recommend
  44. field :state
  45. field :show_cs_qrcode
  46. field :created_by
  47. # # field :category_id
  48. field :article_cat
  49. # field :agree
  50. # field :disagree
  51. # # field :comments_count
  52. # field :v_cover
  53. field :tags
  54. field :display_cover, :enum do
  55. enum do
  56. DISPLAY_COVER_ENUM
  57. end
  58. end
  59. field :url
  60. field :share_benefit_desc
  61. # field :is_recommand
  62. field :created_at
  63. # field :updated_at
  64. end
  65. show do
  66. field :id
  67. field :title
  68. field :subtitle
  69. field :about
  70. field :s_title
  71. field :cover do
  72. formatted_value do
  73. bindings[:view].tag(:img, {:src => bindings[:object].get_img,
  74. :style => 'width: 100px;height: 100px;cursor: pointer;display: block;max-width: 100px;',
  75. :onClick => "javascript:window.open('#{bindings[:object].get_img}')"})
  76. end
  77. end
  78. field :s_img do
  79. formatted_value do
  80. bindings[:view].tag(:img, {:src => bindings[:object].get_s_img,
  81. :style => 'width: 100px;height: 100px;cursor: pointer;display: block;max-width: 100px;',
  82. :onClick => "javascript:window.open('#{bindings[:object].get_s_img}')"})
  83. end
  84. end
  85. field :source
  86. field :editor
  87. field :click
  88. field :sort
  89. field :recommend
  90. field :state
  91. field :show_cs_qrcode
  92. field :created_by
  93. field :article_cat
  94. field :seo_title
  95. field :seo_keyword
  96. field :seo_desc
  97. field :tags
  98. field :display_cover, :enum do
  99. enum do
  100. DISPLAY_COVER_ENUM
  101. end
  102. end
  103. field :url
  104. field :share_benefit_desc
  105. field :created_at
  106. field :updated_at
  107. end
  108. edit do
  109. field :title
  110. field :subtitle
  111. field :about
  112. field :s_title
  113. field :display_cover, :enum do
  114. enum do
  115. DISPLAY_COVER_ENUM
  116. end
  117. end
  118. field :url
  119. field :source
  120. field :editor
  121. field :sort
  122. field :recommend
  123. field :state
  124. field :show_cs_qrcode
  125. field :created_by
  126. field :article_cat
  127. field :seo_title
  128. field :seo_keyword
  129. field :seo_desc
  130. field :tags
  131. field :content, :ck_editor
  132. # field :cover
  133. field :v_cover, :file_upload do
  134. pretty_value do
  135. bindings[:view].tag(:img, {:src => bindings[:object].get_img, :class => 'preview'})
  136. end
  137. end
  138. field :v_s_img, :file_upload do
  139. pretty_value do
  140. bindings[:view].tag(:img, {:src => bindings[:object].get_s_img, :class => 'preview'})
  141. end
  142. end
  143. #field :share_benefit_min
  144. #field :share_benefit_max
  145. #field :share_benefit_must_follow
  146. #field :benefit_max
  147. #field :single_benefit_max
  148. #field :same_ip_limit
  149. # field :click
  150. # field :status
  151. # field :category_id
  152. # field :agree
  153. # field :disagree
  154. # field :comments_count
  155. # field :is_recommand
  156. field :url_guide, :ck_editor
  157. field :share_benefit_desc
  158. end
  159. end
  160. def v_cover=file
  161. unless file.blank?
  162. clear_img
  163. file_name = "#{UUID.new.generate[0...8].downcase}.jpg"
  164. file_path = "#{IMG_STORE_PATH}/#{file_name}"
  165. Ali::Oss.store(Ali::Oss::BUCKET_NAME_PUBLIC_READ, file_path, file.read)
  166. self.cover = file_path
  167. self.save
  168. end
  169. end
  170. def v_s_img=file
  171. unless file.blank?
  172. clear_s_img
  173. file_name = "#{UUID.new.generate[0...8].downcase}.jpg"
  174. file_path = "#{IMG_STORE_PATH}/#{file_name}"
  175. Ali::Oss.store(Ali::Oss::BUCKET_NAME_PUBLIC_READ, file_path, file.read)
  176. self.s_img = file_path
  177. self.save
  178. end
  179. end
  180. def clear_img
  181. file_path = "#{self.cover}"
  182. Ali::Oss.delete_object(Ali::Oss::BUCKET_NAME_PUBLIC_READ, file_path)
  183. end
  184. def clear_s_img
  185. file_path = "#{self.s_img}"
  186. Ali::Oss.delete_object(Ali::Oss::BUCKET_NAME_PUBLIC_READ, file_path)
  187. end
  188. def get_img
  189. url = "http://#{Ali::Oss::CDN_URL_FOR_HOST}/#{self.cover}"
  190. return url
  191. end
  192. def get_s_img
  193. url = "http://#{Ali::Oss::CDN_URL_FOR_HOST}/#{self.s_img}"
  194. return url
  195. end
  196. def after_destroy
  197. clear_img
  198. clear_s_img
  199. end
  200. # def cover=(file)
  201. # unless file.blank?
  202. # clear_cover
  203. # _ = UUID.new.generate[0...8]
  204. # Ali::Oss.store_article_cover(_, file.read)
  205. # write_attribute :cover, _
  206. # end
  207. # end
  208. # def cover(size='')
  209. # _ = read_attribute(:cover)
  210. # _.blank? ? '' : Ali::Oss.url_for_article_cover(_, size)
  211. # end
  212. # def clear_cover
  213. # Ali::Oss.del_file_article_cover(read_attribute(:cover))
  214. # end
  215. # private
  216. # def resource_url
  217. # self.cover
  218. # end
  219. # def after_create
  220. # Search.create_index(Search::INDEX_NAME_OF_ARTICLES, self.id, self.title,
  221. # self.about, self.editor, self.source, self.created_at.to_i, "#{CONFIG_FILE["host"]}/article/#{self.id}?from=search", "文章")
  222. # end
  223. # def after_destroy
  224. # #删除在阿里的索引
  225. # Ali::Css.delete_doc(Search::INDEX_NAME_OF_ARTICLES, self.id)
  226. # end
  227. end