отображение сообщений об ошибках с haml - PullRequest
2 голосов
/ 18 февраля 2012

Вот моя форма:

= form_for @talent do |f|

  - if @talent.errors.any?
    #error_explanation
      %h2= pluralize(@talent.errors.count, "error")
      "prohibited this user from being saved:"
         %ul - @talent.errors.full_messages.each do |msg|
           %li= msg

  = f.label :First_Name
  = f.text_field :first_name
  = f.label :Last_Name
  = f.text_field :last_name
  = f.label :City
  = f.text_field :city
  = f.label :State
  = f.text_field :state
  = f.label :Zip_code
  = f.text_field :zip_code
  = f.label :Email
  = f.text_field :email
  = f.submit "Create"

Вот мое сообщение об ошибке:

Illegal nesting: nesting within plain text is illegal.

Extracted source (around line #7):

4:     #error_explanation
5:       %h2= pluralize(@talent.errors.count, "error")
6:       "prohibited this user from being saved:"
7:         %ul - @talent.errors.full_messages.each do |msg|
8:           %li= msg
9: 
10:   = f.label :First_Name

Я не могу понять, что я делаю неправильно.

Ответы [ 2 ]

3 голосов
/ 19 февраля 2012

Во-первых, ваша строка %ul должна быть отдельной, с петлей под ней.Кроме того, ваша строка %ul не должна иметь отступ под строкой, указанной выше:

- if @talent.errors.any?
  #error_explanation
    %h2= pluralize(@talent.errors.count, "error")
    "prohibited this user from being saved:"
    %ul
      - @talent.errors.full_messages.each do |msg|
        %li= msg

Но что вы, вероятно, хотите, чтобы часть "запрещен ..." была частью вашей h2?Если так:

- if @talent.errors.any?
  #error_explanation
    %h2
      = pluralize(@talent.errors.count, "error")
      "prohibited this user from being saved:"
    %ul 
      - @talent.errors.full_messages.each do |msg|
        %li= msg
2 голосов
/ 19 февраля 2012

Если вы помещаете несколько вещей в тег, как и для вашего h2, вам нужно сделать отступ для всех, а не для вставки одного и добавления второго. Хэмл думает, что вы пытаетесь вложить свой ul в текст над ним.

= form_for @talent do |f|

  - if @talent.errors.any?
    #error_explanation
      %h2
        = pluralize(@talent.errors.count, "error")
        "prohibited this user from being saved:"
      %ul - @talent.errors.full_messages.each do |msg|
        %li= msg

Или, если вы не хотите, чтобы текст внутри h2, вы только что получили отступ для вашего ul неправильно. Верните его на два пробела.

#error_explanation
  %h2= pluralize(@talent.errors.count, "error")
  "prohibited this user from being saved:"
  %ul - @talent.errors.full_messages.each do |msg|
    %li= msg
...