【问题标题】:Rails 5 nested form find or createRails 5 嵌套表单查找或创建
【发布时间】:2017-05-28 21:03:54
【问题描述】:

我有两个型号RunPatientRun belongs_to PatientPatient has_many 运行。

Run 模型上,我使用accepts_nested_attributes 通过使用fields_for 的常规Rails 表单将患者的信息输入到运行中。

现在我有一个基本形式(精简版),如下所示:

<%= form_for(@run) do |f| %>
   <%= f.fields_for :patient do |p| %>
     <%= p.text_field :patient_name, placeholder: 'John Doe', class: 'form-control' %>
    <% end %>
<% end %>

我能够在表单内创建一个患者并拒绝在模型内创建的关联/嵌套对象。但我想做的是:

1.) 有一个搜索/选择框,我可以在其中输入患者姓名,它会自动完成

2.) 如果找到患者,它会选择患者并将其用于运行。

3.) 如果它没有找到患者或不是正确的患者,我希望能够以某种方式使用 first_or_create 创建与运行相关的新患者记录。

我已经搜索了一些关于这方面的例子,除了一个旧的 Railscast espisode 并没有太大帮助并且使用了我想避免的 jQuery 自动完成(使用 selectize 或 select2 代替)之外,我得到了简短的结果。

我将继续研究我在网上找到的示例,但我正在寻找有关如何执行此操作的任何建议。我觉得我可以从控制器内的集合中实例化患者,并使用 selectize/select2 框中的那些来选择患者和相关的患者 ID 嵌套字段。所以选择患者不会有问题,但我不确定如何处理创建不匹配的患者。

【问题讨论】:

  • 请注意,教程请求在这里是题外话。 “帮助您重写代码”的请求通常被解读为“为我重写代码”,这在 Stack Overflow 上并不总是很受欢迎。在了解您将完成这项工作的情况下,最好问一些较小的问题。
  • @halfer 明白了,我将编辑我的问题并详细说明一下。我已经通过 Stack 进行了搜索,结果很短。
  • 如果您只想选择现有患者,您可以使用选择标签&lt;%= f.collection_select :patient_id, Patient.all, :id, :name %&gt;。如果patient_id 不为零,则可以拒绝嵌套属性。比自动完成要简单得多。
  • @max 这就是我使用 selectize 或 select2 作为搜索框的想法。问题是如果患者不存在,我需要能够创建它们。如果有两个同名的患者,那可能是个问题。
  • 您的应用程序需要能够处理(和区分)同名的不同患者。

标签: ruby-on-rails forms ruby-on-rails-4 nested


【解决方案1】:

这回答了我的问题:

https://gorails.com/episodes/select-or-create-with-selectize-js

我能够使用它来降低我需要的行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多