Эта конкретная строка кода, кажется, работает с Rails 2.x.x, но не 3.x.x? Может кто-нибудь помочь помочь "перевести" это? - PullRequest
0 голосов
/ 01 июля 2011
<li<% if @flits.first == flit %> class="first" <% end %>>

Я создал CSS для #flits_list и #flits_list :hover в application.css в Rails 3, но я бы хотел, чтобы первый flit в списке (flits_list.first) имел другой CSS, поэтому я создал класс, но код возвращает ошибку

нет ошибки метода в home # index. у вас есть нулевой объект, когда вы этого не ожидали! Возможно, вы ожидали экземпляр массива. ошибка произошла при оценке nil.first

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 02 июля 2011

Проблема в том, что @flits равен nil, возможно, потому что ваш метод all_flits возвращает nil.

Тем не менее, я бы порекомендовал не размещать эту логику в представлении, разбивая тег таким образом. У вас есть несколько вариантов, чтобы сделать его чище:


Вариант 1: использовать псевдокласс CSS first-child примерно так:

 li:first-child {
    ...
 }

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


Вариант 2. Использование помощников тегов Rails.

<%= content_tag :li, :class => @flits.first==flit?"first":"" %>

Вариант 3: убрать его вспомогательным методом

<%= li_for_flit %>

Тогда в помощнике:

def li_for_flit
   #spit out your tag here
end
...