已关闭,此问题需要更focused。它目前不接受回答。
**想改善这个问题吗?**更新问题,使其只关注editing this post的一个问题。
上个月关门了。
Improve this question
我正在开发一个Rails应用程序,用户可以在其中“设计”表单。请参见下图:
为此,我有以下模型:
class ProgramPart < ApplicationRecord
has_many :block_elements, dependent: :destroy
class BlockElement < ApplicationRecord
belongs_to :program_part
enum element_types: {
rich_content: 0,
textfield: 1,
textarea: 2
}
has_rich_text :content
我不太确定如何向用户呈现动态表单以及使用什么方法。
目前拥有:
<%= form_with [how should my form look when inputs are dynamic?] %>
<% @program_part.block_elements.each do |block| %>
<% if block.element_type == BlockElement.element_types[:rich_content] %>
<%= block.content %>
<% elsif block.element_type == BlockElement.element_types[:textfield] %>
<%= block.question %>
<!-- not sure how this should look -->
<%= @form_builder.text_field(:answer_value)%>
<% elsif block.element_type == BlockElement.element_types[:textarea] %>
<!-- textarea -->
<% end %>
<% end %>
<% end %>
有没有人做过类似的事情,或者知道什么好的资源?
1条答案
按热度按时间jtjikinw1#
我已经实现了类似的事情与形式可配置的管理员,然后由客户端使用。以下是基本内容:
1.为每个可能的DOM输入配置模板
1.制作一个使用JS填充页面模板的表单-例如,有一个按钮“添加文本字段”,通过按下它,您可以使用JS向表单添加输入。
1.提交填充的PageTemplate后,您可以为用户呈现它。
你需要一个抽象Page对象,抽象DOM对象,然后每个DOM元素都有一个对象,如下所示:
dom_type
将告诉您的系统需要呈现什么类型的对象。当然,它也应该存储在数据库中,但它可以帮助你自动填充数据库字段的类型,如果你正在添加一个text_field对象,而不是抽象的东西。正如你所看到的,每个静态dom对象都是从抽象DomObject
嵌套而来的,抽象DomObject
基本上是所有创建的dom对象的表。你甚至可以添加诸如宽度,高度或其他css类的信息作为dom对象表的参数,使每个创建的dom输入成为一个uniq和高度可定制的实体。Wrapup
这种方法是面向对象的,并通过设计进行组合。所有你需要做的就是设置每个“砖”,然后用JS动态组装“墙”,它将整齐地存储在DB中。然后从数据库中获取页面对象,并在需要的地方呈现它。
希望能帮上忙!:)