在db rake:populate中设置不可访问的属性



我有一个名为Treating的模型,它需要同时存在"请求者"one_answers"被请求者"。这两个属性在处理模型中都不可访问。这是型号:

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

我正试图用这个rake文件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

除非我在Treating模型中使:requester成为一个可访问的属性,并在"requestor.sent_treatings.create!(intro:interro)"我的rake文件的行,当我运行rake db时,我会得到一个验证错误:populate说"requestee is blank":

rake aborted!
Validation failed: Requestee can't be blank
Tasks: TOP => db:populate

1) [更重要]如何在我的rake文件中设置"requestee",而不必在模型中访问它?2) 我有一种巧妙的方法来声明"50.times.do"循环中的"requestee"变量:"requestee=User.find(rand(1..6))"。有什么比我在"requestors.each do | requester|"中声明"requester"变量更好的声明方法呢?

非常感谢!

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

最新更新