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

前端之家收集整理的这篇文章主要介绍了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>

猜你在找的Ruby相关文章