我尝试用 rails3 中的 nested_form gem 做一些好事。(我不能使用这个 gem,但看起来 rails3 总是需要一个 gem 来做这些事情......而且谷歌总是将我重定向到这个 gem 以获取 rails3 中的嵌套表单)
所以我有这个架构:
- Model1 has_many Model2 (, :dependent => :nullify)
- Model1 has_many Model3 (, :dependent => :nullify)
- 模型 2 属于模型 1
- Model2 属于 Model3
- 接受_嵌套属性_for :model3, :limit => 1
- attr_accessible :model3_attributes
- Model3 has_many Model2
- Model3 属于 Model1
思路,在后台创建一个Model1,然后创建一个嵌套的Model2,在Model2的创建表单中,在列表中选择或者新建一个Model3。
我搭建了很多东西,现在我正在查看有关如何执行此操作的文档,但我需要帮助,因为 rails3 会“猜测”所有内容,所以我觉得我添加的东西没有真正的教程或示例,而不是做正确的事情。
目前:
- 如果我创建了一些 Model3,一切正常。这是我的 Model2 表单:http://pastebin.com/6te9fSK8(它们出现在列表中,我选择它们)
- 现在我想拥有“新模型3”功能。所以我添加了nested_form gem
- 我添加了这段代码http://pastebin.com/nzqVzwzn
- 首先,在编辑的情况下,它“有效”:我可以创建一个新模型3,它将被添加到列表中并替换以前的模型。
- 但是,经过审核,每次我想添加一个新的,它都会替换我添加的旧的。我看起来像一个 JavaScript 问题(我使用的是 jQuery9)
- 如果我创建一个新模型 1,然后创建一个嵌套模型 2,模型 3 列表为空。因此,即使我添加了一个带有新字段的新模型 3,表单也希望我从(空)列表中选择一个模型 3。即使我从表单中删除列表,它仍在等待我选择一个模型 3 并且不关心我添加的新模型 3。(我可以通过在创建新模型 1 时创建默认模型 3 来绕过它,但它看起来像一个弱补丁......)
我没有接触我的控制器,除了 model2 我添加了一个受保护的方法来从 :model1_id 找到 @model1
class Models2Controller < ApplicationController
before_filter :get_model1
...
protected
def get_model1
@model1 = Model1.find(params[:model1_id])
end
如果有人可以帮助我正确管理此问题,那将非常有帮助。
谢谢