2011-04-26 8 views
19

मैं वर्तमान में नकली डेटा के समूह के साथ एक परियोजना पर एक विकास डेटाबेस को पॉप्युलेट करने की कोशिश कर रहा हूं, यह अनुकरण करने के लिए कि यह सैकड़ों लेखों/उपयोगकर्ताओं। मैंने कार्य करने के लिए विभिन्न रत्नों को देखा - जैसे कि फैक्टरी गर्ल, लेकिन दस्तावेज बहुत कम था और मुझे यह नहीं मिला - लेकिन पॉप्युलेटर और फेकर रत्नों का उपयोग करके समाप्त हो गया और निम्नलिखित रेक कार्य किया ...फर्जी डेटा के साथ पेपरक्लिप छवि अपलोड जेनरेट करना - रेल पॉप्युलेटर/फेकर रत्न पर रूबी

namespace :db do 
    desc "Testing populator" 
    task :populate => :environment do 
     require "populator" 
     require "faker" 

     User.populate 3 do |user| 
     name = Faker::Internet.user_name 
     user.name = name 
     user.cached_slug = name 
     user.email = Faker::Internet.email 
     user.created_at = 4.years.ago..Time.now 
     end 
    end 
end 

टेक्स्ट आधारित डेटा के लिए बहुत अच्छा काम करता है। हालांकि, सभी उपयोगकर्ताओं के पास अवतार होता है जिसे पेपरक्लिप अटैचमेंट के माध्यम से अपलोड किया जा सकता है, साथ ही साथ सभी नियमित सामग्री में थंबनेल अनुलग्नक भी उसी तरीके से होते हैं।

मुझे लगता है कि पॉप्युलेटर मणि डेटाबेस की सीधी आबादी को सीधे डेटाबेस में करता है और ऐसा नहीं करने के लिए सक्रिय रेकॉर्ड मान्यताओं के माध्यम से चल रहा है .. इसलिए मैं मानता हूं कि पेपरक्लिप सभी अलग-अलग थंबनेल और आवश्यक (और अपलोड करने के लिए) उचित निर्देशिका) अवतार के लिए अगर मैंने उपरोक्त रेक कार्य में फ़ाइलपैथ के साथ फ़ील्ड भर दिया है।

क्या पॉप्युलेटर या किसी अन्य तरीके से नकली छवियों को पॉप्युलेट करने का कोई तरीका है? या शायद मेरे हार्ड ड्राइव पर स्टॉक छवियों की निर्देशिका में रेक रिकॉर्ड को इंगित करने का एक तरीका प्रत्येक रिकॉर्ड के लिए यादृच्छिक थंबनेल स्वत: उत्पन्न करने के लिए? Google पर एक शिकार के लिए एक शिकार लिया, लेकिन इस विषय पर ज्यादा जानकारी नहीं बनाई है।

अद्यतन

अंतिम समाधान, सोच के pwnfactory की लाइन के आधार पर ...

namespace :db do 
    desc "Testing populator" 
    task :populate => :environment do 
    require "populator" 
    require "faker" 

    User.populate 3 do |user| 
     name = Faker::Internet.user_name 
     user.name = name 
     user.cached_slug = name 
     user.email = Faker::Internet.email 
     user.created_at = 4.years.ago..Time.now 
    end 

    User.all.each { |user| user.avatar = File.open(Dir.glob(File.join(Rails.root, 'sampleimages', '*')).sample); user.save! } 
    end 
end 

यह मूल रूप से वापस चारों ओर लूप और सभी रिकॉर्ड पर sampleimages निर्देशिका से अवतार अपलोड की गई।

उत्तर

7

अपने कार्य में एक यादृच्छिक छवि संबद्ध करने के लिए, आप निम्न की कोशिश कर सकते:

user.avatar = File.open(Dir.glob(File.join(Rails.root, 'sampleimages', '*')).sample) 

जहां sampleimages है अवतारों से युक्त एक निर्देशिका विषय से संबंधित नहीं यादृच्छिक

+0

ने इसे एक कोशिश की और उपरोक्त मेरे रेक कार्य में उस पंक्ति को डाला (और मेरे रेल प्रोजेक्ट में नमूनाकरण निर्देशिका को उचित रूप से बनाया) लेकिन यह निकल गया "रेक निरस्त हो गया! अपरिभाषित विधि 'अवतार =' # <पॉप्युलेटर :: रिकॉर्ड: 0x103fed130 > "काम चलाने पर। चूंकि डेटाबेस कॉलम को तीन (avatar_file_name, avatar_content_type, avatar_file_size) में विभाजित करता है, इसलिए ऐसा क्यों हो सकता है। – Shannon

+0

आप उदाहरण के लिए, नाम आप अपने मॉडल में परिभाषित का उपयोग करना चाहिए: 'वर्ग फ़ोटो acw

+0

है मैं क्या कर रहा हूं, मेरे उपयोगकर्ता मॉडल से लगाव 'अवतार' (has_attached_file: अवतार) नाम दिया गया है। – Shannon

0

मेरे आस-पास एक तरीका है जो मेरे विचारों में सशर्त है।

मान लें कि आपका मॉडल "उपयोगकर्ता" है, और इसका अवतार है। तो आप निम्न कर सकते हैं:

<% if product.avatar.exists? %> 
    ... show the attached photo 
<% else %> 
    .. show a default photo 
<% end %> 

यह पेपरक्लिप साथ मेरे लिए काम करता है, और मैं हर समय नहीं बल्कि सभी छवि सभी उपयोगकर्ताओं से जुड़ी होने के बारे में चिंता की तुलना में मेरी देव डेटाबेस में इसका इस्तेमाल करते हैं।

+2

पर जुड़े होने की, लेकिन वहाँ ऐसा करने का एक और तरीका है ... यदि आप अपने मॉडल में your_attached_file में default_url का उपयोग करते हैं, तो आपके दृश्यों में पेपरक्लिप कॉल डिफ़ॉल्ट छवि पर वापस आ जाएगी यदि कोई अपलोड की गई छवि नहीं मिलती है। सुविधाजनक और दृश्य कोड कम कर देता है। मेरी स्थिति के लिए, मेरे पास पहले से ही मेरे उपयोगकर्ता इस तरह से स्थापित हैं, लेकिन मैं कुछ यादृच्छिकता देखना चाहता हूं ... सामग्री का उल्लेख न करने के लिए एक छवि संलग्न है, कोई फॉलबैक संस्करण नहीं है। – Shannon

1
user.avatar = File.open(Dir['app/assets/images/*.jpg'].sample) 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^