Rails中的动态嵌套表单

时间:2016-02-08 13:34:12

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

我有一个我正在维护的Rails 3.2.22应用程序,我需要创建一个准复杂的表单。它是一种将药物记录到报告中的表格。

所以我的想法是建立一个名为NarcoticUsage的模型来包含记录,然后是一个名为Narcotic的相关/嵌套模型,它将是具有药物名称的实际模型。

我需要在Narcotic使用形式中以某种方式包含添加Narcotic模型的多个实例的功能。即。一个表格,您将拥有药物名称(来自Narcotic模型),然后是药物的有效期和序列号(存储在NarcoticUsage中)。在表格中,我希望能够点击" +"签署或类似的东西,以添加多种药物。因此,实质上如果有人记录了Tylenol,Cough Syrup,Ativan,他们可以添加一个动态字段来填写药物名称(来自麻醉剂),然后输入与麻醉剂模型相关的有效期和序列号。

我对如何使用nested_attributes设计模型和表单有一些想法,但我不确定设计它的最佳方法是。

有关使用nested_forms的最佳做法的任何想法吗?

提前致谢,如果您需要澄清或示例代码,请告知我们。

更新:这是我提出的模型架构

narcotic_usage.rb

has_many :narcotics
attr_accessible :narcotic_id, :lot_number, :expiration_date

narcotic.rb

belongs_to :narcotic_usage
attr_accessible :name

1 个答案:

答案 0 :(得分:0)

我不确定你是否需要嵌套表格。我会这样你拖动/添加代表麻醉品的div,每个都有一个隐藏字段,名称设置为“narcotic_usage [narcotic_ids] []”,值为麻醉剂的id。

然后,当提交表单时,所有这些内容的ID将自动进入通过params[:narcotic_usage][:narcotic_ids]访问的数组,然后您可以使用@narcotic_usage更新params[:narcotic_usage]对象通常的方式。 has_many宏给你的方法之一是narcotic_ids=,它希望用一系列麻醉id调用。

换句话说,如果你有Tylenol的id为123而Ativan的id为456,那么这样做:

@narcotic_usage.narcotic_ids = [123,456]
@narcotic_usage.save

然后rails将在数据库中为您创建关联。你的表格的参数只需要加入其中。