向rails迁移添加两个关系

时间:2018-03-28 12:19:26

标签: ruby-on-rails

我在这里有一个患者访问报告迁移。我需要添加报告以允许一个患者有很多报告,一个用户(医生)有很多报告。已建立医生患者关系。我如何将报告链接到用户和患者

VisitReport.rb

 class CreateVisitReport < ActiveRecord::Migration
      def change
        create_table :visit_reports do |t|
          t.text :date
          t.text :report

          t.timestamps
          end
      end
    end

Users.rb(医生)

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.timestamps null: false
      t.string :email, null: false
      t.string :encrypted_password, limit: 128, null: false
      t.string :confirmation_token, limit: 128
      t.string :remember_token, limit: 128, null: false
    end

    add_index :users, :email
    add_index :users, :remember_token
  end
end

Patient.rb

class CreatePatients < ActiveRecord::Migration
  def change
    create_table :patients do |t|

      t.string    :name,      null: false
      t.integer   :age,       null: false
      t.string    :phone,     null: false
      t.string    :ailment,   null: false
      t.datetime  :apointment,  null: false
      t.string    :status,    null: false

      t.belongs_to :user, null: false, foreign_key: true

      t.timestamps null: false
    end
  end
end

2 个答案:

答案 0 :(得分:0)

您应该使用polymorphic associations

将以下列添加到VisitReport表中

visit_reportable_type
visit_reportable_id

并按如下方式修改模型的关联

class User
    has_many :visit_reports, as: :visit_reportable
end

class Patient
    has_many :visit_reports, as: :visit_reportable
end

答案 1 :(得分:0)

看,您的VisitReports方法看起来像这样,名为The has_many :through Association

class CreateVisitReports < ActiveRecord::Migration
  def change
    create_table :visit_reports do |t|
      t.text :date
      t.text :report

      t.references :user, foreign_key: true
      t.references :patient, foreign_key: true

      t.timestamps
      end
  end
end

然后rake db:migrate,如果你需要使用命令创建,那么命令将如下所示

rails g model VisitReport date:text report:text user:references patient:references

它会生成上面写的相同内容。

模型看起来像这样

class User < ApplicationRecord
    has_many :visit_reports, dependent: :destroy
    has_many :patients, through: :visit_reports
end

class Patient < ApplicationRecord
    has_many :visit_reports, dependent: :destroy
    has_many :users, through: :visit_reports
end

class VisitReport < ApplicationRecord
    belongs_to :user
    belongs_to :patient
end

如果您已经迁移了visit_reports表并且不希望rollback,那么此表然后键入您的命令提示符

rails g migration add_index_to_visit_reports

然后转到db/migrate并更新看起来像这样

class AddIndexToVisitReports < ActiveRecord::Migration
  def change
    add_reference :user, :visit_report, index: true
    add_reference :patient, :visit_report, index: true
  end
end

然后rake db:migrate