Не все ли здесь ответы с блоками try / catch содержат .close (), содержащиеся в блоке finally?
Пример для отмеченного ответа:
PrintWriter out = null;
try {
out = new PrintWriter(new BufferedWriter(new FileWriter("writePath", true)));
out.println("the text");
}catch (IOException e) {
System.err.println(e);
}finally{
if(out != null){
out.close();
}
}
Кроме того, с Java 7 вы можете использовать оператор try-with-resources . Для закрытия объявленного ресурса (ов) не требуется блок finally, потому что он обрабатывается автоматически, а также менее подробен:
try(PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("writePath", true)))) {
out.println("the text");
}catch (IOException e) {
System.err.println(e);
}
Используйте fields_for
для связанных моделей.
Не должно быть квадратных скобок вокруг параметров fields_for
В вашем примере кода я не могу найти связь между Patient
и Diagnosis
, и множественное число диагноза ставит диагноз , вы можете указать это в config/initializers/inflections.rb
:
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular 'diagnosis','diagnoses'
end
Таким образом, ваша модель Patient
должна содержать
class Patient < ActiveRecord::Base
attr_accessible :age, :name, :city, :street, :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>
Вы можете добиться этого, используя вложенные атрибуты:
Patient.rb
class Patient < ActiveRecord::Base
attr_accessible :age, :name, :pretreatments_attributes, :diagnosiss_attributes
has_many :pretreatments
has_many :diagnosiss
accepts_nested_attributes_for :pretreatments
accepts_nested_attributes_for :diagnosiss
end
Patient_controller.rb
def show
@patient = Patient.find(params[:id])
@patient.pretreatments.build
@patient.diagnosiss.build
respond_to do |format|
format.html # show.html.erb
format.json { render json: @patient }
end
end
пациентов / show.html.erb:
<%= form_for @patient do |f|%>
<h3>Pretreatments:</h3>
<%= f.fields_for :pretreatments do |field| %>
<%= field.label "Content" %></div>
<%= field.text_field :content %>
<% end %>
<h3>Diagnosis:</h3>
<%= f.fields_for :diagnosiss do |field| %>
<%= field.label "Content" %></div>
<%= field.text_field :content %>
<% end %>
<%=f.submit %>
<% end %>
И это все
Есть несколько способов сделать это:
fields_for
, заключается в том, что у вас есть form_for
для родительской модели, и внутри нее вы можете поместить fields_for
модели которые принадлежат родителю. Хороший пример приведен в Rails Docs $("form #new_pretreatments").submit();
и то же самое для Диагностики после нажатия кнопки. Вы можете использовать fields_for
для второй модели, которая работает как form_for
, но не генерирует теги формы. См. документы .
Для вложенных форм доступно несколько драгоценных камней. один из них - awesome_nested_fields . Я не использовал это ранее, но это показывает хороший код в документации. Другой является simple_form .
Надеюсь, это поможет !!!