2011-01-19 3 views
1

Я пытаюсь выполнить следующую разметку для всех моих элементов формыпользовательские разметки проверки в Rails (3)

<div class="input-container"> 
    <label>Topic Title</label> 
    <div class="input-holder"> 
    <input type="text" /> 
    </div> 
</div> 

<div class="textarea-container"> 
    <label>Post</label> 
    <div class="textarea-holder"> 
    <textarea></textarea> 
    </div> 
</div> 

недопустимые поля разметки:

<div class="input-container alert"> 
    <label>Topic Title</label> 
    <div class="input-holder"> 
    <input type="text" /> 
    </div> 
</div> 
<div class="textarea-container alert"> 
    <label>Post</label> 
    <div class="textarea-holder"> 
    <textarea></textarea> 
    </div> 
</div> 

вот мой текущий Haml разметка:

.input-container 
    = f.label :title, 'Topic Title' 
    .input-holder 
    = f.text_field :title 
.textarea-container 
    = f.label :body, 'Post' 
    .textarea-holder 
    = f.text_area(:body, :size => "60x10") 

Теперь то, что мне нужно делать, если я хочу, чтобы контейнер дивы иметь класс предупреждения, когда поле в моей форме invali д?

ответ

0

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

Вы можете переопределить ActionView :: Base.field_error_proc, но это не помогает с окружающими элементами.

Это можно сделать вручную, проверив ошибки в каждом поле ('post.errors [' body ']. Nil?') И вывести условный класс предупреждения.

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

Но было бы неплохо сделать это более автоматизированным способом Rails-y.

0

Это может быть лучше всего использовать либо formtastic или simple_form драгоценных камней, которые из опоры коробки освещающих индивидуального недействительного поля.

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

+0

Разделяют ли они контейнер или только вход? Потому что это ключевой вопрос. Я быстро посмотрел на каждого, потому что меня интересует ответ, но я не могу сказать (не хочу, чтобы я добавлял еще один камень в свои проекты;). –

+0

Даже если они создают стиль контейнера, вы можете использовать селектор CSS, чтобы найти основное поле: '.alert input' или любой класс, который они фактически используют. –

+0

Нет, я хочу, чтобы я мог стилизовать содержащий элемент (см. Мой ответ выше), но обычно цитируемый метод переопределения ActionView :: Base.field_error_proc не дает вам содержащего элемента, только затронутый вход , –