0

ケースモデルがあります。ケースモデルには、ラボモデルのIDに3つのフィールドがあります。
ケースモデル

belongs_to :lab1, foreign_key: 'lab1', class_name: 'Lab', inverse_of: :lab1, conditions: {step1: true}
belongs_to :lab2, foreign_key: 'lab2', class_name: 'Lab', inverse_of: :lab2, conditions: {step2: true}
belongs_to :lab3, foreign_key: 'lab3', class_name: 'Lab', inverse_of: :lab3, conditions: {step3: true}

ラボモデルで

has_many :lab1, foreign_key: 'lab1', class_name: 'Case', inverse_of: :lab1
has_many :lab2, foreign_key: 'lab2', class_name: 'Case', inverse_of: :lab2
has_many :lab3, foreign_key: 'lab3', class_name: 'Case', inverse_of: :lab3

そして、ケースveiwの場合にも形成します

 .lab_group
   = f.association :lab1, label: false, input_html: {'data-placeholder'=> t('step.one')}
   = f.input :lab1_delivered, label: t('case.done')
 .lab_group
   = f.association :lab2, label: false, input_html: {'data-placeholder'=> t('step.two')}
   = f.input :lab2_delivered, label: t('case.done')
.lab_group
   = f.association :lab3, label: false, input_html: {'data-placeholder'=> t('step.three')}
   = f.input :lab3_delivered, label: t('case.done')

しかし、それを保存しようとすると、間違いがあります

Lab(#70207759169540) expected, got String(#70207716712320)

とリクエストパラメータ

{"utf8"=>"✓",
 "authenticity_token"=>"G0BWY6V6tkxRt81I0ZOxKXs8RD/7cdfbZfhVfRTmboo=",
 "case"=>{"number"=>"123",
 "doctor_id"=>"1",
 "lab1"=>"1",
 "lab1_delivered"=>"0",
 "lab2"=>"2",
 "lab2_delivered"=>"0",
 "lab3"=>"2",
 "lab3_delivered"=>"0",
 "delivered"=>"0",
 "patient"=>"",
 "comment"=>"for example"},
 "commit"=>"Save"}

とスクリーン

どうすれば修正できますか?

4

2 に答える 2

1

解決策:
ケース テーブルに lab1、lab2、lab3 列がありました。しかし、foreign_key はそれを見ていません。lab1_id、lab2_id、lab3_id のように、lab1、lab2、lab3 の名前を変更します。
関連からforeign_keyを削除します。
どれどれ。
ケースモデル

belongs_to :lab1, class_name: 'Lab', inverse_of: :lab1, conditions: {step1: true}
belongs_to :lab2, class_name: 'Lab', inverse_of: :lab2, conditions: {step2: true}
belongs_to :lab3, class_name: 'Lab', inverse_of: :lab3, conditions: {step3: true}

ラボモデルで

has_many :lab1, class_name: 'Case', inverse_of: :lab1
has_many :lab2, class_name: 'Case', inverse_of: :lab2
has_many :lab3, class_name: 'Case', inverse_of: :lab3

そして形で

.lab_group
  = f.association :lab1, label: false, input_html: {'data-placeholder'=> t('step.one')}
  = f.input :lab1_delivered, label: t('case.done')
.lab_group
  = f.association :lab2, label: false, input_html: {'data-placeholder'=> t('step.two')}
  = f.input :lab2_delivered, label: t('case.done')
.lab_group
  = f.association :lab3, label: false, input_html: {'data-placeholder'=> t('step.three')}
  = f.input :lab3_delivered, label: t('case.done')

foreign_key が機能しない :( バグですか? たぶん。

于 2012-08-16T09:46:55.463 に答える
0

ここでは、foreign_keys 名に lab1_id、lab2_id、lab3_id の代わりに lab1、lab2、lab3 という名前を使用していると思います。

于 2012-08-15T22:05:09.513 に答える