2012-06-15 27 views
7

Tôi đang sử dụng Ruby (1.9.3) và Rails (3.2.2). Tôi có tệp tác vụ chứa một nhóm dữ liệu giả được điền vào cơ sở dữ liệu của mình.Không thể chuyển đổi Phạm vi thành Số nguyên (Ruby on Rails)

Dưới đây là một số phần của nhiệm vụ mà tôi tin là gây ra vấn đề

#Create random Tender and populate the db 
    20.times do |n| 
     title = "#{Faker::Company.bs()} tender " 
     company_name = Faker::Company.name 
     opening_date=Time.at(rand * Time.now.to_i) 
     closing_date=Time.at(opening_date + (8*7*24*60*60)) #add 8 weeks to the deadline 
     bid_amount= rand(10000..100000) 
     description=Faker::Lorem.paragraph(sentence_count = 3) 


     Tender.create!(title: title, 
        company_name: company_name, 
        opening_date: opening_date, 
        closing_date: closing_date, 
      bid_amount: bid_amount , 
      bid_amount: bid_amount , 
      description: description) 
    end 

Nó hoạt động tốt với dev nhưng chỉ có phần trên không được thực hiện trên cơ sở dữ liệu sản xuất. Tôi đang sử dụng gem 'sqlite3', '1.3.5' trên dev. và

gem 'pg', '0.12.2' vào sản xuất (Heroku)

Khi tôi chạy

git push heroku 
$ heroku pg:reset SHARED_DATABASE --confirm myapp 
$ heroku run rake db:migrate 
$ heroku run rake db:populate 

db:populate throws an error that says **can't covert Range to Integer.** 

Bất kỳ ý tưởng những gì các vấn đề có thể được?

EDIT: Kiểu dữ liệu của BID_AMOUNT là decimal

Trả lời

7

phiên bản sản xuất ruby ​​của bạn không phải là 1.9.3. Có thể là 1.8.7

$ ruby -v 
ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0] 
$ irb 
>> rand(10000..100000) 
TypeError: can't convert Range into Integer 
    from (irb):1:in `rand' 
    from (irb):1 
>> exit 
$ rvm use 1.9.3 
Using /Users/chirantan/.rvm/gems/ruby-1.9.3-p0 
$ irb 
1.9.3p0 :001 > rand(10000..100000) 
=> 37036 

Cài đặt ruby ​​1.9.3 vào sản xuất và phương pháp rand sẽ hoạt động như mong đợi.

+0

Thú vị, tham chiếu hàm rand() không đề cập đến nó chấp nhận một phạm vi nào cả .. http://ruby-doc.org/core-1.9.3/Kernel.html#method-i-rand – MBHNYC

+1

Nếu bạn đọc dòng đầu tiên trong mô tả đó, nó nói "Nếu max là Range, trả về một số pseudorandom nơi range.member (number) == true". – Chirantan

+0

Điều này không nói (và không chấp nhận đúng) cho 1.8.7 http://ruby-doc.org/core-1.8.7/Kernel.html#method-i-rand – Chirantan

Các vấn đề liên quan