【问题标题】:Insert a non-input row into a Formtasic form将非输入行插入到 Formtasic 表单中
【发布时间】:2012-05-09 21:02:08
【问题描述】:

我在 Rails 3.2 中使用 Formtastic 2.1.1(带有 Active Admin),我想在我的表单中插入一行 存在输入字段。这可能吗?Formtastic DSL 中的语法是什么?

这是一个例子:

form do |f|

    f.inputs "Model Info" do
      f.input :title
      f.input :published
      f.input :path
    end

end

我想做这样的事情:

form do |f|

    f.inputs "Model Info" do
      f.input :title
      f.input :published
      f.input :path
      f.div "This is some important text that people using this form need to know"
    end

end

以前有人用 Formtastic 做过这个吗?

【问题讨论】:

    标签: ruby-on-rails-3 activeadmin formtastic


    【解决方案1】:

    这是我自己想出来的。我只需要在没有任何方法调用的情况下插入 html,如下所示:

    form do |f|
    
      f.inputs "Model Info" do
        f.input :title
        f.input :published
        f.input :path
      end
    
      f.inputs "Custom HTML Stuff" do
        "<div id=\"element-name\">
          Some kind of content
        </div>".html_safe
      end
    
    end
    

    【讨论】:

      【解决方案2】:

      要在任何位置插入任何自定义代码,您可以使用f.form_buffers.last

      form do |f|
        f.form_buffers.last << "<p>Hello world!</p>".html_safe # The simple way
      
        ft = f.template # just a helper variable
      
        f.inputs "Foo" do
          f.input :title
      
          f.form_buffers.last << ft.content_tag(:li) do
            ft.content_tag(:p, "Hello again!") +
                ft.tag(:input, type: :hidden, name: "bar[]", value: "baz")
          end
          f.input :path
        end
      end
      

      请注意 HTML 结构。如果你从f.inputs 块调用它,你的代码将被放置在&lt;ol&gt; 元素中。在“表单”级别,您位于 &lt;form&gt; 元素内。

      一点警告:与任何“未记录的功能”一样,此方法可能会在任何新版本中更改而不会发出警告。

      【讨论】:

      • 如何在

        中嵌入其他 content_tags?

      • 您可以在&lt;p&gt;do..end 块内调用content_tag(:span,...) {...}。我不记得确切 (记忆力差,现在不可能测试它),但我想你只是添加(+)几个content_tag 的调用来创建兄弟姐妹(比如当你在&lt;p&gt; 中需要两个跨度)
      • 第一种方法非常有用,值得添加作为活动管理员的辅助方法。没有支持输入字段的只读行似乎很简单......
      • form_buffers 已被最新 Active Admin 版本中使用的 Formtastic 版本弃用。
      • This comment 在相关的 github 问题上描述了该弃用的解决方案。
      【解决方案3】:

      IDK 如果这仍然是人们搜索的东西,但它是给我的。由于form_buffers 已被弃用,我做了以下事情并且效果很好(在一些 CSS 帮助下)。

      form do |f|
      
        f.inputs "Model Info" do
          f.input :title
          f.input :published
          f.input :path
          li "Your important text here", class: "some_class"
        end
      end
      

      这个输出:

      <li class="some_class">
        Your important text here
      </li>
      

      在谷歌搜索太久后从文档中得到了这个想法 FORMS 和这里ARBRE

      【讨论】:

        【解决方案4】:

        这是@arsen7 回答的稍微简化的形式:

        f.form_buffers.last << 
          "<p>Activate interlock, dynatherms connected</p>".html_safe
        

        在我的表单中是这样的:

        还有一个模仿 ActiveAdmin 的默认样式:

        f.form_buffers.last << (<<END
        <li class="string input optional stringish">
          <label class="label">Activate interlock</label>
          <div style="display: inline-block;">Dynatherms connected</div>
        </li>
        END
        ).html_safe
        

        看起来像这样:

        【讨论】:

        • 哇,别人用过战神金刚——哦,是我。
        猜你喜欢
        • 1970-01-01
        • 2020-11-10
        • 1970-01-01
        • 1970-01-01
        • 2015-11-25
        • 1970-01-01
        • 2017-09-20
        • 2016-05-15
        • 1970-01-01
        相关资源
        最近更新 更多