Newbie Rails的用户如果我完全忽略了某些事情,那就很抱歉我只是在寻找解决这个问题的方法。
我运行的Rails应用程序使用虚拟属性来定义复杂的has_many:through关系。我想要做的是使用现有条目的id,而不是在用户提交表单时创建新条目。我试图使用find_or_initializes_by和find_or_create无济于事。根据我的设置方式,它可以成功更改连接表上的一个诊断列(但将其他诊断列留空,导致回滚),或者它根本不起作用。
我的用例背景:一个案例可以有很多诊断(诊断),其中一些是主要的,另一些是"差异"诊断。案例和多个诊断在联接表中相关。
我目前的设置:
case.rb
def new
@case = Case.new
@case_and_diagnoses = @case.case_and_diagnoses.build
@primary_diagnoses = @case_and_diagnoses.build_primary_diagnosis
@differential_diagnoses = @case_and_diagnoses.build_differential_diagnosis
end
案件表格的相关部分:
<%= f.fields_for :case_and_diagnoses do |x| %>
<%= x.fields_for :primary_diagnosis do |diagnosis| %>
<%= diagnosis.label :name, "Diagnosis" %>
<%= diagnosis.text_field :name %>
<% end %>
<%= x.fields_for :differential_diagnosis do |differential| %>
<%= differential.label :name, 'Differential diagnosis' %>
<%= differential.text_field :name %>
<% end %>
<% end %>
解决此问题的最佳方法是什么?我不需要使用明确的代码块,但我正在寻找策略,以便我可以找到自己的方式。非常感谢你!
更新
模特:
class Case < ApplicationRecord
before_save :get_diagnoses
belongs_to :submitter, class_name: 'User', foreign_key: 'submitter_id'
belongs_to :resident, class_name: 'User', foreign_key: 'resident_id'
belongs_to :faculty, class_name: 'User', foreign_key: 'faculty_id'
has_one :service
has_many :case_and_diagnoses
has_many :primary_diagnoses, through: :case_and_diagnoses
has_many :differential_diagnoses, through: :case_and_diagnoses
accepts_nested_attributes_for :case_and_diagnoses
end
class Diagnosis < ApplicationRecord
has_many :case_and_diagnoses
has_many :cases, through: :case_and_diagnoses
end
class CaseAndDiagnosis < ApplicationRecord
belongs_to :case
belongs_to :primary_diagnosis, class_name: 'Diagnosis', foreign_key: :primary_diagnosis_id, optional: true
belongs_to :differential_diagnosis, class_name: 'Diagnosis', foreign_key: :differential_diagnosis_id, optional: true
accepts_nested_attributes_for :primary_diagnosis, :differential_diagnosis
end