मैं पेपरक्लिप के साथ रेल पर रूबी के लिए कुछ छवि अपलोड कोड लिख रहा हूं, और मेरे पास एक कामकाजी समाधान है लेकिन यह बहुत हैकी है इसलिए मैं वास्तव में बेहतर कार्यान्वित करने के बारे में सलाह की सराहना करता हूं यह। मेरे पास एक 'संपत्ति' श्रेणी है जिसमें अपलोड की गई छवियों के बारे में जानकारी शामिल है जिसमें पेपरक्लिप अटैचमेंट, और 'जेनरेटर' क्लास शामिल है जो साइजिंग जानकारी को समाहित करता है। प्रत्येक 'परियोजना' में कई संपत्तियां और जनरेटर होते हैं; सभी जनरेटर द्वारा निर्दिष्ट आकारों के अनुसार सभी संपत्तियों का आकार बदलना चाहिए; इसलिए प्रत्येक परियोजना के आकार का एक निश्चित सेट होता है कि इसकी सभी संपत्तियों में होना चाहिए।रेल पर रूबी - पेपरक्लिप और गतिशील पैरामीटर
जेनरेटर मॉडल:
class Generator < ActiveRecord::Base
attr_accessible :height, :width
belongs_to :project
def sym
"#{self.width}x#{self.height}".to_sym
end
end
एसेट मॉडल:
class Asset < ActiveRecord::Base
attr_accessible :filename,
:image # etc.
attr_accessor :generators
has_attached_file :image,
:styles => lambda { |a| a.instance.styles }
belongs_to :project
# this is utterly horrendous
def styles
s = {}
if @generators == nil
@generators = self.project.generators
end
@generators.each do |g|
s[g.sym] = "#{g.width}x#{g.height}"
end
s
end
end
एसेट नियंत्रक बनाने के विधि:
def create
@project = Project.find(params[:project_id])
@asset = Asset.new
@asset.generators = @project.generators
@asset.update_attributes(params[:asset])
@asset.project = @project
@asset.uploaded_by = current_user
respond_to do |format|
if @asset.save_(current_user)
@project.last_asset = @asset
@project.save
format.html { redirect_to project_asset_url(@asset.project, @asset), notice: 'Asset was successfully created.' }
format.json { render json: @asset, status: :created, location: @asset }
else
format.html { render action: "new" }
format.json { render json: @asset.errors, status: :unprocessable_entity }
end
end
end
समस्या मैं कर रहा हूँ
एक चिकन अंडे मुद्दा है: नव बनाई गई संपत्ति को पता नहीं है कि कौन से जनरेटर (आकार विनिर्देश) का उपयोग तब तक किया जा सकता है जब तक इसे तुरंत चालू नहीं किया जाता है ly। मैंने @ project.assets.build का उपयोग करने की कोशिश की, लेकिन फिर एसेट को प्रोजेक्ट एसोसिएशन सेट होने और मेरे ऊपर निकलने से पहले पेपरक्लिप कोड अभी भी निष्पादित किया गया है।
'if @generators == nil' हैक है तो अद्यतन विधि नियंत्रक में आगे हैकिंग के बिना काम करेगी।
सब कुछ बहुत बुरा लगता है। क्या कोई सुझाव दे सकता है कि इसे और अधिक समझदार तरीके से कैसे लिखना है, या इस तरह की चीज लेने के लिए एक दृष्टिकोण भी?
अग्रिम धन्यवाद! :)
यह सवाल है और यह जवाब मेरे App में एक ही सुविधा के निर्माण के लिए एक बहुत मदद की है। हर किसी को धन्यवाद! :) – Gediminas