Дополнительное, нежелательное поле от рельсов блока haml частично - PullRequest
0 голосов
/ 26 мая 2011

Я вывожу коллекцию в хамл

#- if @fields.count>0
  .sfields
    #= render :partial=>"sfields/field", :collection=>@fields, :as=>:field
    = render @fields

При наличии нулевых полей всегда отображается одно фантомное поле. Когда я добавляю 'if @ fields.count> 0', тогда, когда есть ноль, нет вывода, но как только я добавляю одно поле, я получаю два рендеринга, одно добавленное мной и фантомное поле.

Это первое, с чем я столкнулся, и я не уверен, что то, что я сделал, вывело фантомное поле. Я помню, что видел что-то подобное, но не могу вспомнить, где я это видел, и мой поиск ничего не дал. АТМ.

РЕДАКТИРОВАТЬ 1:

Содержание частичного

.sfield
  = field.name
    .fielditems
    #- fields.items each do |i|
      #= render :partial=>"items/item", :locals=>{:i => i}
      = render field.items

Итак, вокруг всегда висит дополнительное поле.

РЕДАКТИРОВАТЬ 2

Абстрактно, у меня есть это:

Показать действие -> частичное для полей -> частичное для элементов поля -> частичное для выбора элементов поля, 4 разных места на одной странице.

Таким образом, fields - это набор элементов, а item - набор вариантов. Даже после прохождения рендеринга рельсов по умолчанию (например, render @fields, render field.items и т. Д.) У меня все еще есть это фантомное поле. Я не хочу скрывать это с помощью js или чего-то еще (очень ужасно), поэтому мне нужно найти какое-то решение, которое влечет за собой больше проб и ошибок и чтения.

Работает, но безобразно с висящим фантомным полем.

РЕДАКТИРОВАТЬ 3

Я сделал несколько шагов назад, объединил все в один шаблон, без партиалов. Все еще там. Что-то основное, что я делаю неправильно или отсутствует, добавляет это фантомное поле, так что раздражает. Тогда это не обязательно частичные вопросы.

РЕДАКТИРОВАТЬ 4: решено

уточнил @fields select в контроллере, чтобы выбрать только поля, прикрепленные к элементу, который я показываю

* * +1032 например,

@ fields = @ показывая.fields

до

@ fields = @ Showing.fields (: show_id => @ Showing.id)

Я все еще хотел бы знать, почему он делал это grr ...

Ответы [ 2 ]

1 голос
/ 26 мая 2011

Ваши @ поля не были бы списком хэшей, не так ли?

ПРИМЕЧАНИЕ. Из-за проблем с обратной совместимостью коллекция не может быть одним из хэшей. Обычно вы просто сохраняете там доменные объекты, такие как Active Records.

- http://api.rubyonrails.org/classes/ActionView/Partials.html

0 голосов
/ 17 августа 2011

Примечание РЕДАКТИРОВАТЬ 4: РЕШЕНО

уточнил @fields, выбранный в контроллере, чтобы выбрать только поля, прикрепленные к элементу, который я показываю

например

@ fields =@ show.fields

до

@ fields = @ Showing.fields (: show_id => @ show.id)

...