Find_or_initializes_by用于复杂模型

时间:2017-10-23 02:21:14

标签: ruby-on-rails-5

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

0 个答案:

没有答案