是一个小项目,我尝试将患者模型与咨询联系起来。一位病人有很多人:咨询,我的形式是:
<%= f.association :patient %>
我将id参数从患者传递到动作&#39; new&#39;这样:
<%= link_to new_consultum_path(:id => @patient.id) %>
我认为:
如何让f.association字段自动获取相应的patient_id?
我怎样才能确定patient_id是当前患者?
如果我想隐藏这个字段,那就好了,如果我把
代替这是一个更好的方法吗?
为什么在视图中显示#patient:0x007f4e7c32cbd0?
感谢您的帮助。
答案 0 :(得分:1)
为什么视图中显示了#
patient:0x007f4e7c32cbd0
这是Patient
对象。
这意味着您需要调用此对象的属性 - EG @patient.name
。
-
f.association field
自动接受通讯员patient_id
This可能有所帮助:
看起来组织模型没有任何这些字段:[
:to_label
,:name
,:title
,:to_s
]因此SimpleForm
无法检测到默认值 标签和价值收集方法。我想你应该通过它 手动
#app/models/patient.rb
class Patient < ActiveRecord::Base
def to_label
"#{name}"
end
end
显然,您需要在模型中使用title
,name
或to_label
方法,以便f.association
填充数据。
-
我怎样才能确定patient_id是当前患者?
如果您需要对此进行验证,则表明您的代码结构不一致。如果您需要将patient_id
设置为current patient
,您肯定可以在控制器中进行设置:
#app/controllers/consultations_controller.rb
class ConultationsController < ApplicationController
def create
@consultation = Constultation.new
@consultation.patient = current_patient
@consultation.save
end
end
如果需要,我可以提供更多上下文。
答案 1 :(得分:0)
您希望使用fields_for将咨询与患者相关联,这与form_for类似,但不构建表单标记。
您从患者对象开始,您可以遍历咨询协会,将其绑定到表格字段中。
它看起来像这样
<%= form_for @patient do |patient_form| %>
<% patient_form.text_field :any_attribute_on_patient %>
<% @patient.consultations.each do |consultation| %>
<%= patient_form.fields_for consultation do |consultation_fields| %>
<% consultation_fields.text_field :any_attribute_on_consulatation %>
<% end %>
<% end %>
<% end %>
抱歉,代码可能不完全正确。
查看field_for here
的文档您还必须就患者进行accepts_nested_attributes_for次咨询。当您设置accepts_nested_forms_for时,Rails将自动将相关的咨询对象更新为患者,并保存您所做的任何编辑。您肯定希望对此类型的大多数嵌套表单处理使用accepts_nested_attributes_。