如何转换此haml代码以显示菜单项而不是列表的下拉列表?
我们的rails 4.0 app中的现有代码:
应用程序/视图/应用/ _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 :(得分: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
答案 1 :(得分: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选项,以便在用户选择时将用户带到所选选项。