我有两个非常相似的模型预处理和诊断,属于模型患者:
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的参数中不应有方括号
在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>