是否有一种Rails方式来制作具有嵌套多态关系(新的或现有的)的表单?

时间:2015-09-17 21:06:50

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

我的模型Navigation具有多态targettarget可以是PageExternalLinkPlugin。每个目标都有不同的属性(页面包含contenttitle,外部链接包含titleurl,插件具有自己的多态关系。

我正在构建一个小表单来添加一个导航链接,我想让我的用户选择这些关系中现有的一个(这很容易,只是一个分组的集合选择),但是我也想让他们选择一个新的'每个target模型的选项。

问题是 - 如何以相同的形式包含它?

我可以创建一个表单对象,但这感觉就像是最后的选择。我知道我可以接受target的嵌套属性,但我也不知道如何使用选择表单来做到这一点。我知道我可以做一些js hackery在选择或不选择新的&选项。

所有这些都没有感受到铁路。这个问题感觉就像一个不常见的问题,我想这是一个解决的问题,我试图重新发明轮子。我错过了什么选择?有什么方法可以做到这一点?

2 个答案:

答案 0 :(得分:1)

你可能想看看Cocoon gem,会处理很多" js hackery"你提到了。

This post展示了如何使用Cocoon为(在您的情况下)每个可能的target类呈现相应的字段。

您是否为每个目标类都有一个单独的按钮取决于您。

答案 1 :(得分:0)

我认为你应该使用globalid gem。

以下是描述其工作原理的good article

GlobalID可帮助您唯一识别模型。例如。 gid://Company/1gid://Employee/1具有相同的ID,但具有不同的GlobalID。您只需使用GlobalID::Locator

即可找到模型
GlobalID::Locator.locate gid_value

这应该可以使简单的组合框易于编程。