0

好的根据所取得的进展大量更新这个问题,同时通过消除一些与问题无关的信息来简化这个问题。我一直在审查很多关于 has_many 的帖子和 railscasts :通过,但我仍然对相对简单的/新形式有问题......这是模型:

/app/models/user.rb(将用户视为医生)

  has_many :intakes
  has_many :patients, :through => :intakes
  accepts_nested_attributes_for :intakes

/app/models/intake.rb

  belongs_to :user
  belongs_to :patient

/app/models/patient.rb

has_many :intakes
has_many :users, :through => :intakes
    accepts_nested_attributes_for :intakes
    accepts_nested_attributes_for :users

现在,我想要做的是一个简单的/patients/new并有一个表格,其中包含一些患者信息和两个医生(用户)的下拉列表。执行此操作的经典方法已解释为:

/app/controllers/patients_controller.rb

def new
  @patient = Patient.new
  2.times { @patient.intakes.build.build_user }
end

在我看来: /app/views/patient/new.html.erb

<%= form_for @patient do |f| %>
  <%= render 'fields', :f => f %>
  <%= f.submit "Add Patient" %>
<% end %>

最后,部分字段: /app/views/patients/_fields.html.erb

<%= f.fields_for :intakes do |builder| %>
    <%= builder.label :first_name, "Cared for by" %>

    <%= select("patient[new_intake_attributes]", "user_id",
                            User.justthishosp(current_user.hospital).collect {
                    |user|
        [ user.first_name+" "+user.last_name, user.id]} ) %>
<% end %>

现在上面实际上确实导致了表单出现,并且有两个“摄入” html select 元素!是的!问题是A)只有第一次摄入会保存,因为B)摄入 HTML 格式与我在所有建议中看到的不匹配,C)我无法确定正确的 SELECT 语法来获取与建议匹配的 HTML 格式。

上述代码生成的 HTML 是:

<label for="patient_intakes_attributes_0_first_name">Cared for by</label>
    <select id="patient_new_intake_attributes_user_id"
name="patient[new_intake_attributes][user_id]">
<option value="1"> </option>
<option value="4">Dan Akroyd</option>
<option value="2">Dave Collins</option></select>
    </p>

    <p>
    <label for="patient_intakes_attributes_1_first_name">Cared for by</label>
    <select id="patient_new_intake_attributes_user_id" 
name="patient[new_intake_attributes][user_id]"><option value="1"> </option>
<option value="4">Dan Akroyd</option>
<option value="2">Dave Collins</option></select>

注意,特别是选择名称的形式: name="patient[new_intake_attributes][user_id]"

他们在 Advanced Rails 食谱中想要的是: name="patient[new_intake_attributes][][user_id]"

他们说您应该通过以下选择行来实现这一目标: select("patient[new_intake_attributes][]", "user_id",

但是,该语法给了我 *`@patient[new_intake_attributes]' is not allowed as an instance variable name*

我已经尝试了很多 [] 和患者,患者,:患者的变体,但我无法得到任何东西来给我在患者 [new_intake_attributes] 之后包含空 [] 的 HTML

所以,此时我在表单上有两个选择框,但只有一个保存,因为只有一个在 params 哈希中传递。其中,顺便说一句,看起来像这样:

(PatientsController.create) params[:patient]: 
{"first_name"=>"Nine", "last_name"=>"Niner", ...,
 "new_intake_attributes"=>{"user_id"=>"2"}, "pri_loc_id"=>"6"}

我需要:

"new_intake_attributes"=>[{"user_id"=>"2"},{"user_id"=>"4"}]

或者我可以很乐意在我的虚拟方法中处理的任何类型的集合。

哇!圣烟!谢谢!

4

0 回答 0