Ho un'applicazione Rails con diversi modelli con la stessa struttura:Estensione di una classe di rubino con un pezzo di codice autonomo
class Item1 < ActiveRecord::Base
WIDTH = 100
HEIGHT = 100
has_attached_file :image, styles: {original: "#{WIDTH}x#{HEIGHT}"}
validates_attachment :image, :presence => true
end
class Item2 < ActiveRecord::Base
WIDTH = 200
HEIGHT = 200
has_attached_file :image, styles: {original: "#{WIDTH}x#{HEIGHT}"}
validates_attachment :image, :presence => true
end
Il codice attuale è più complicato, ma che è abbastanza per semplicità.
Penso di poter inserire la parte comune del codice in un unico punto e quindi utilizzarlo in tutti i modelli.
Ecco quello che mi viene in mente:
class Item1 < ActiveRecord::Base
WIDTH = 100
HEIGHT = 100
extend CommonItem
end
module CommonItem
has_attached_file :image, styles: {original: "#{WIDTH}x#{HEIGHT}"}
validates_attachment :image, :presence => true
end
Ovviamente non funziona per due motivi:
CommonItem
ha alcuna idea su metodi di classe invoco.WIDTH
eHEIGHT
le costanti sono ricercate inCommonItem
anzichéItem1
.
ho provato ad usare include
invece di extend
, alcuni modi di class_eval
e ereditarietà di classe, ma nessuna funziona.
Sembra che manchi qualcosa di ovvio. Per favore dimmi cosa.
http://api.rubyonrails.org/ classes/ActiveSupport/Concern.html è fatto per cose come questa. – jdoe