【问题标题】:How to create a Rails form_for with dynamic form fields from a database table?如何使用数据库表中的动态表单字段创建 Rails form_for?
【发布时间】:2012-05-15 06:51:53
【问题描述】:

很抱歉,如果有人在某处提出并完整回答了这个问题。不确定我是否使用正确的 Rails 搜索来回答这个问题。

我想根据存储在数据库中的字段创建一个 Rails 表单。这是我的模型到目前为止的样子。

class Field < ActiveRecord::Base
  belongs_to :form
end

class Form < ActiveRecord::Base
  has_many :fields
end

到目前为止,字段模型非常简单,带有 type:string 和 required:boolean 列。名称是我要创建的控件的名称(文本框、复选框、单选按钮)。理想情况下,我想做这样的事情:

<%= form_for [something here] do |f| %>
  <% @fields.each do |field| %>
    <%= field.type %><br />
  <% end %>
<% end %>

我正在努力寻找一种方法,将 行替换为能够正确呈现 field.type 的标记。

这可能吗?在将字段类型和值存储为 json/xml 的字段模型中使用有效负载列会更好吗?

【问题讨论】:

  • type:string 是否将其存储为 Rails 方法帮助程序(如 radio_button)?在这种情况下,您可以使用f.send(field.type, field.name)。如果没有,只需将您的类型值映射到 Rails 助手,然后发送正确的方法。
  • 目前我没有使用辅助方法保存。我是这个概念的新手,但这听起来正是我想做的! f.send() 会进入标签吗?例如,。谢谢。
  • @TuteC 提到的应该有效
  • 你问这么好的问题也很棒:)

标签: ruby-on-rails ruby


【解决方案1】:

就像@TuteC 提到的,如果你要保存类型,你可以使用 .send 方法动态调用每个字段:

<%= form_for [something here] do |f| %>
  <% @fields.each do |field| %>
    <%= f.send(field.type.to_sym, field.name) %><br />
  <% end %>
<% end %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 2023-03-16
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多