1

我将 f.semantic_fields_for 与 haml 一起使用

这是当前的片段。

      %ul.documents
        =f.semantic_fields_for :documents do |u|
          = link_to(u.object.comment.presence || u.object.file.original_filename, u.object.file.url)                                                                                     
          = u.input :comment, :as=>:string
          = u.hidden_field :_destroy
          = link_to_function image_tag("/img/del_documets.png"), "remove_fields(this)", :class => "btn"

这里的问题是只有“u.input :comment, :as=>:string” 在由 formtastic 创建的“li”内。链接和其他字段位于其他位置,并且无法正确设置这个损坏的 html 的样式。

有没有办法确保一切都在正确的 li 内?

即使我在 f.semantic_fields_for 之后添加一个 li,它也只会包装第一个链接,并且以下元素只会被上面的 ul 完全包装。

4

2 回答 2

1

您还可以在生成包装器时覆盖 Formtastic 的默认行为,inputs如下所示:

module Formtastic
  module Inputs
    module Base
      module Wrapping
        def input_wrapping(&block)
          template.content_tag(:li,
            [template.capture(&block), error_html, hint_html].join("\n").html_safe, 
            wrapper_html_options
          )
        end
      end
    end
  end
end

注意content_tag(:li. 例如,您可以将其替换content_tag(:div为。

你知道如何在 Rails 中重写模块方法吗?

于 2012-06-19T19:06:03.120 回答
1

似乎 formtastic 总是将输入包装起来<li>以避免<fieldsets>在里面<ol>,这是无效的。

最好的解决方法是放置<li>所有元素并根据需要添加wrapper_html => { :class => :your_class }到您的输入中。这样你就可以按照自己的方式设计风格。

我认为您不需要ul.documents输入,semantic_fields_for已经使用<ol>.

直接生成 html 的库不是这样,你最好让你的 html 和 css 适应它们,而不是试图让它们生成你的 html。

我会这样做(并从中设置我自己的 CSS 样式):

    =f.semantic_fields_for :documents do |u|
      %ul.documents
        %li= link_to(u.object.comment.presence || u.object.file.original_filename, u.object.file.url)                                                                                     
        = u.input :comment, :as=>:string
        %li= u.hidden_field :_destroy
        %li= link_to_function image_tag("/img/del_documets.png"), "remove_fields(this)", :class => "btn"

希望这可以帮助。

于 2012-06-19T15:30:53.527 回答