如何在下拉菜单项中传递数组?

时间:2013-09-17 11:46:00

标签: ruby-on-rails arrays drop-down-menu ruby-on-rails-4 simple-form

如何转换此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

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

2 个答案:

答案 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选项,以便在用户选择时将用户带到所选选项。