2015-09-13 2 views
1

Зачем этот метод в моем помощнике приложения невидимым в представлении?Блочная форма link_to удаляет href

def sortable(column, title = nil) 
    title ||= column.titleize 
    d = (column == sort_column && sort_direction == 'asc') ? 'desc' : 'asc' 
    link_to(title, sort: column, direction: d) do 
    content_tag(:i, nil, class: "fa fa-#{sort_direction}") 
    end 
end 

Если link_toне вложенный с классом значка в нем работает нормально, то есть, это прекрасно работает:

def sortable(column, title = nil) 
    title ||= column.titleize 
    d = (column == sort_column && sort_direction == 'asc') ? 'desc' : 'asc' 
    link_to(title, sort: column, direction: d) 
end 

Что я должен сделать, чтобы получить икону отобразить? Это проявляется в исходном коде штрафа ...

invisible

Это просто оставляет пустую ячейку в таблице. Есть идеи?

Update

Похоже, что блок формы link_to удаляет href из a. Смотрите на скриншот выше, и сравнить с этим:

what the hell

Что происходит?

Вот вызов sortable:

<th><%= sortable 'client_code', 'Client ID' %></th> 
+0

Не могли бы вы привести пример вызова сортировать? – FyodorX

ответ

1

Проблема заключается в том, что fa-asc не существует, следовательно, пустую ячейку. Вы должны использовать fa-sort-asc (см. Font Awesome icon set).


Что касается вашего обновления, первый аргумент link_to «s является URL, в то время как вы передаете ему название в виде строки (см documentation). Попробуйте что-то вроде этого:

link_to(users_path, sort: column, direction: d) do 
    (title + ' ' + content_tag(:i, nil, class: "fa fa-sort-#{sort_direction}")).html_safe 
end 

Обратите внимание, что вы должны сцепить названия, потому что при использовании link_to в качестве блока всего тела определяется блоком. Вам также необходимо использовать html_safe, чтобы он мог корректно выводиться.

+0

Это делает работу значков (мой плохой там), но блочная форма 'link_to' удаляет' href' из 'a' (см. Выше), что кажется неправильным. –

+0

В обоих ответах исправлена ​​моя проблема, но так как это упоминает ошибку 'fa-asc', я тоже буду придерживаться этого. Благодаря! –

1

, когда данный блок, link_to имеет следующую подпись (ы)

link_to(options = {}, html_options = {}) do 
    # name 
end 

link_to(url, html_options = {}) do 
    # name 
end 

так в вызове он выглядит, как он будет выбирать последнюю версию (url, html_options).

Проблема в том, что вы вообще не проходите в URL-адресе, поэтому, если вы посмотрите, это делает href вашим title client_id.

Поскольку вы не можете легко передать в URL, а также необходимые параметры, используя форму блока (выглядит как ваш после railscast?)

возможно что-то вроде этого.

сделать глиф-хелпер ..(Я ставлю это как вспомогательное приложение)

def glyph(*names) 
    classes = names.map{|name| "fa-#{name.to_s.gsub('_','-')}" }.unshift 'fa' 
    content_tag :i, nil, class: classes 
end 

, а затем использовать, чтобы добавить символ в названии вызова и избавиться от блока ..

def sortable(column, title = nil) 
    title ||= column.titleize 
    d = (column == sort_column && sort_direction == 'asc') ? 'desc' : 'asc' 
    link_to (title + glyph("sort-#{sort_direction}")).html_safe, sort: column, direction: d 
+0

А, я понимаю, что вы имеете в виду, но это все еще возвращает значок и без названия. –

+0

Ahh проблема заключается в том, что 'sort: column, direction: d' на самом деле являются параметрами, которые необходимо подавать в url_helper для генерации URL-адреса, а не html_options. ... – Doon