0

「リクエスター」と「リクエスティ」の両方の存在を必要とする治療と呼ばれるモデルがあります。これらの属性のいずれも、治療モデルではアクセスできません。モデルは次のとおりです。

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

:requestor を治療モデルでアクセス可能な属性にし、rake ファイルの 'requestor.sent_treatings.create!(intro: intro)' 行で 'intro: intro' の後に 'requestee: requestee' を続けない限り、 「requestee is blank」と言って rake db:populate を実行すると、検証エラーが発生します。

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 |requestor|」で「requestor」変数を宣言する方法と同様に、これを宣言するより良い方法は何ですか?

本当にありがとう!

4

1 に答える 1

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
于 2012-08-03T14:42:50.867 に答える