2012-06-19 2 views
1

Я использую f.semantic_fields_for с Hamlsemantic_fields_for не группа, все в один литий

здесь текущий фрагмент.

 %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: комментарий,: а =>: строка" внутри "Ли", созданный formtastic. Ссылки и другие поля попадают куда-то еще, и его любопытное невозможно корректно разбить этот сломанный html.

Есть ли все-таки, чтобы убедиться, что все попало в правильное ли?

Даже если я добавлю li сразу после f.semantic_fields_for, он будет только обернуть первую ссылку, и следующие элементы будут обернуты только ul полностью.

ответ

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" 

Надеется, что это помогает.

+0

Проблема в том, что весь мой элемент должен находиться в одной строке. это дает мне четыре LI, в то время как я могу, возможно, обернуть их для LI в UL, но да, это довольно уродливое –

+0

, и скрытое_поле не обернуто ликой –

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?

+0

, это, вероятно, способ получить хороший результат, но мне нужно для передачи параметра на вход, чтобы не изменять поведение по умолчанию. Я все равно, так как у меня не так много времени, меняя все –

+0

Спасибо, что голосовали! –

Смежные вопросы