0

如何将此haml代码转换为显示菜单项的下拉列表而不是列表?

我们的 rails 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

应用程序/helpers/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

用户可以选择一个月并显示该月发布的所有帖子。我正在寻找相同的格式和行为,但必须使用下拉菜单。

4

2 回答 2

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
于 2013-09-17T12:14:37.307 回答
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。

添加了onchangehtml 选项,以便在选择时将用户带到所选选项。

于 2013-09-17T23:19:09.790 回答