0

Как я могу преобразовать этот код haml для отображения выпадающего списка пунктов меню, а не списка?Как передать массив в виде выпадающего меню?

Существующий код в наших рельсах 4.0 приложение:

приложение/просмотров/приложение/_archive.html.haml

.sidebar-header=I18n.t('blog.archive') 
-archive_dates.each do |date| 
    .archive-link=archive_link(date, '%B %Y') 

приложение/модели/post.rb

def self.archive_dates(audience) 
    archive_dates = Array.new 
    published.send(audience).each do |post| 
     archive_dates << post.publish_date.to_date if archive_dates.count == 0 || post.publish_date.month != archive_dates.last.month || post.publish_date.year != archive_dates.last.year 
    end 
    archive_dates 
end 

приложение/помощники/application_helper.rb:

def archive_link(archive_date, format) 
    archive_date = archive_date.to_date 
    link_to I18n.l(archive_date, format: format), posts_path(month: archive_date.month, year: archive_date.year) 
    end 

Это выходной HTML.

http://i.stack.imgur.com/bFaxf.png

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

+0

передать массив в выпадающем списке вы можете использовать = select_tag "имя", options_from_collection_for_select (@name, "ID", "Desc") или = "имя" select_tag, options_for_select (@name) –

ответ

0

Это отобразит выпадающее меню с метками в качестве отформатированных тегов ссылок и значений в качестве фактической ссылки.

= select_tag "name_of_tag" , options_for_select(archive_dates.map{ |date| 
           [archive_link(date, '%B %Y').html_safe, #label 
           posts_path(month: date.month, year: date.year), #value 
           :class => "archive_date" ] # class of each option 
          }), onchange: "window.location = this.options[this.selectedIndex].value;" 

нужно использовать html_safe для каждой метки, чтобы сделать вид, как сырой HTML.

Добавлена ​​опция onchange html, позволяющая пользователю выбрать выбранную опцию при каждом ее выборе.

+0

Спасибо tihom, им все еще сложно сменить вариант onchange. Где это следует добавить? – Steve

+0

обновил ответ. – tihom

2

Вы можете использовать тег select в своем представлении, например.

= select_tag 'user_id', options_for_select(@users.collect{ |u| [u.name, u.id] }) 
# change the value of options_for_select as per your requirement 
+0

Спасибо, У меня это работает в некоторой степени, используя '= select_tag" Ссылка на архив ", options_for_select (archive_dates)' Но это только показывает даты, когда были сделаны записи. Как включить archive_link, чтобы сохранить оригинальное форматирование и показ сообщений, сгруппированных по месяцам? – Steve

+0

Как вы хотите отобразить его? можете ли вы предоставить формат. –

Смежные вопросы