simple_form rails 4,设置自动关联

时间:2015-11-12 21:35:47

标签: ruby-on-rails ruby-on-rails-4 associations simple-form

是一个小项目,我尝试将患者模型与咨询联系起来。一位病人有很多人:咨询,我的形式是:

<%= f.association :patient %>

我将id参数从患者传递到动作&#39; new&#39;这样:

<%= link_to new_consultum_path(:id => @patient.id) %>

我认为:

patient_id

  1. 如何让f.association字段自动获取相应的patient_id?

  2. 我怎样才能确定patient_id是当前患者?

  3. 如果我想隐藏这个字段,那就好了,如果我把

    代替
  4. 这是一个更好的方法吗?

  5. 为什么在视图中显示#patient:0x007f4e7c32cbd0?

  6. 感谢您的帮助。

2 个答案:

答案 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

显然,您需要在模型中使用titlenameto_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_。