ruby-on-rails – Ruby on Rails,两种模式在一种形式

我有两个非常相似的模型预处理和诊断,属于模型患者:
class Pretreatment < ActiveRecord::Base
  belongs_to :patient
  attr_accessible :content
end

class Diagnosis < ActiveRecord::Base
  belongs_to :patient
  attr_accessible :content
end

class Patient < ActiveRecord::Base
  attr_accessible :age,:name,:city,:street,:number
  has_many :anamneses
  has_many :befunds
end

在患者展示页面上,我显示两种形式,一种用于治疗,另一种用于诊断:

<%= form_for([@patient,@patient.preatreatments.build]) do |f| %>
  <div class="field">
    <%= f.label :conten %><br />
    <%= f.text_field :content %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

<%= form_for([@patient,@patient.diagnosiss.build]) do |f| %>
  <div class="field">
    <%= f.label :content %><br />
    <%= f.text_field :content %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

我的问题是如何将两个表单合在一起,以便用户只需按一次提交按钮即可.我不知道,但我认为嵌套属性不是正确的事情来处理它,也许是fieldfield_for`标签

更新我试图使用fields_for标签

<%= form_for([@patient,@patient.pretreatment.build]) do |f| %>
     <div class="field">
       <%= f.label :content %><br />
       <%= f.text_field :content %>
     </div>
     <%= fields_for([@patient,@patient.diagnosiss.build]) do |u| %>
     <div class="field">
       <%= u.label :content %><br />
       <%= u.text_field :content %>
     </div>
     <% end %>
     <div class="actions">
       <%= f.submit %>
     </div>
   <% end %>

但是我收到错误

undefined method `model_name' for Array:Class in <%= fields_for([@patient,@patient.befunds.build]) do |u| %>

解决方法

对相关联的模型使用fields_for.
在fields_for的参数中不应有方括号

在您的代码示例中,我找不到患者和诊断之间的关系,复数诊断是诊断,您可以在config / initializers / inflections.rb中指定这一点:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.irregular 'diagnosis','diagnoses'
end

所以你的患者模型应该包含

class Patient < ActiveRecord::Base
  attr_accessible :age,:number
  has_many :diagnoses
end

你可以用你的形式写:

<div class="field">
   <%= f.label :content %><br />
   <%= f.text_field :content %>
 </div>
 <%= fields_for(@patient,@patient.diagnoses.build) do |u| %>
 <div class="field">
   <%= u.label :content %><br />
   <%= u.text_field :content %>
 </div>
 <% end %>
 <div class="actions">
   <%= f.submit %>
 </div>

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...