我有一个我正在维护的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
答案 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将在数据库中为您创建关联。你的表格的参数只需要加入其中。