1

次のようなフィールドを持つOrganizationテーブルがあります。

id
name
time_zone

Doctors次に、次のようなフィールドを持つ他のテーブルがいくつかあります。

id
organization_id  #foreign_key to Organization
name
salary

これをRubyでモデル化するにはどうすればよいですか?アレイを使用していますか?ハッシュ?マップ?

私はまだRubyに精通していないので、Rubyでこれに何ができるかわかりませんか?たとえば、フラットであれば、単純な配列を使用できますが、この構造はどうでしょうか。後で階層にアクセスしてループできるようにしたいです。

4

1 に答える 1

1
class Organization < ActiveRecord::Base
  has_many :doctors
end

class Doctor < ActiveRecord::Base
  belongs_to :organization
end

あなたが書いたようなものを持っていることを確認してorganization_idから、次のことができます(例として):

@doctor = Doctor.first
@doctor.organization

@organization = Organization.first
@organization.doctors

アップデート

データベースに次のようなものを入力できませんか:

Doctor.where(name: "Frank", specialization: "Rubber Duck Surgery").first_or_create

これを試したことはありませんが、複雑な配列をループするよりもおそらく簡単です。

@organization = Organization.where(name: "Surgeons").first_or_initialize
["Bob", "Frank", "Harry"].each do |name|
  @organization.doctors.where(name: name).first_or_initialize
end
@organization.save

アップデート

では、以下はどうでしょう。

@doctor_names = ["Bob", "Rob", "Fred", "Bill"]
@doctor_salaries = [10000, 15000, 30000, 400]

def return_array_of_hashes(*data)
  array = []
  data[1].each_with_index do |d, i|
    hash = {}
    (0...data.count).to_a.in_groups_of(2).each do |a,b|
      hash.merge!({data[a] => data[b][i]})
    end
    array << hash
  end
  array
end

@doctors_array = return_array_of_hashes("name", @doctor_names, "salary", @doctor_salaries)
# => [{"name"=>"Bob", "salary"=>10000}, {"name"=>"Rob", "salary"=>15000}, {"name"=>"Fred", "salary"=>30000}, {"name"=>"Bill", "salary"=>400}]

@doctors_array.each do |hash|
  Doctor.where(hash).find_or_create
end

このようにして、作成中のどのモデルにも同じ方法を使用でき、配列にデータを簡単に追加できます。keythenの正しい順序でデータを追加していることを確認してくださいvalue

モデルの検証では無効なデータが破棄される可能性がありますが、すべての配列が同じサイズであることを確認する必要がある場合があります。

于 2013-02-16T14:53:27.763 に答える