2012-08-03 26 views
0

我有一個叫做Treating的模型,它需要同時存在'requestor'和'requestee'。這些屬性在處理模型中都不可訪問。這裏的模型:在數據庫rake中設置不可訪問的屬性:填充

class Treating < ActiveRecord::Base 
    attr_accessible :intro, :proposed_date, :proposed_location 

    validates :intro, presence: true, length: { maximum: 190 } 
    validates :requestor_id, presence: true 
    validates :requestee_id, presence: true 

    belongs_to :requestor, class_name: "User" 
    belongs_to :requestee, class_name: "User" 

    default_scope order: 'treatings.created_at DESC' 

end 

我試圖填充這個耙檔測試數據庫,sample_data.rake:

namespace :db do 
    desc "Fill database with sample data" 
    task populate: :environment do 
     ... 

     requestors = User.all(limit: 6) 
     50.times do 
      intro = Faker::Lorem.sentence(5) 
      requestors.each do |requestor| 
       requestee = User.find(rand(1..6)) 
       requestor.sent_treatings.create!(intro: intro) 
      end 
     end 
    end 
end 

除非我做:請求在處理模型的可訪問屬性,並按照「 intro:intro'with'requestee:requestee'in'requestor.sent_treatings.create!(intro:intro)'line of my rake file,當我運行rake db時,我會得到一個Validation錯誤:填充說'requestee是空白':

rake aborted! 
Validation failed: Requestee can't be blank 

Tasks: TOP => db:populate 

1)[more imporant]如何在我的rake文件中設置'requestee',而無需在模型中訪問'requestee'? 2)我在'50.times.do'循環中聲明瞭'requestee'變量:'requestee = User.find(rand(1..6))'。什麼是更好的方式來聲明這與我如何在'requestors.each do | requestor |'中聲明'requestor'變量相似?

非常感謝!

回答

0
namespace :db do 
    desc "Fill database with sample data" 
    task populate: :environment do 
     ... 

     requestors = User.all(limit: 6) 
     requestees = User.find((1..6).to_a) 
     50.times do 
      intro = Faker::Lorem.sentence(5) 
      requestors.each do |requestor| 
       requestee = requestees.sample #random array member, Ruby 1.9+ 
       treating = requestor.sent_treatings.build(intro: intro) 
       treating.requestee = requestee 
       treating.save! 
      end 
     end 
    end 
end 
+0

那有用,謝謝! – keypulsations 2012-08-03 15:04:47