【问题标题】:Date selection with only one dropdown只有一个下拉菜单的日期选择
【发布时间】:2011-05-27 02:48:29
【问题描述】:

我有一个带 created_at 的模型文章

在我的索引视图中,我希望用户能够选择在“2010 年 10 月、2010 年 11 月、2010 年 12 月等”中创建的所有文章。只有一个选择下拉菜单。

以前有人做过吗?

【问题讨论】:

  • 在任何给定的语言中这不应该是相当微不足道的吗?按月+年对文章进行分组,按日期排序,填充下拉列表。问题到底出在哪里?

标签: ruby-on-rails select drop-down-menu


【解决方案1】:

Rails 3 (MySQL)

class Article < ActiveRecord::Base
  ...code here...
  def self.article_months
    group_by_clause = "to_char(created_at,'<your date format>')"
    Article.group(group_by_clause).select("#{group_by_clause} as month, count(*) as count").order(created_at desc).all
  end
  ...code here...
end

在您看来,使用 select_tag 或 collection_select 或其他东西并呈现上面的集合。

【讨论】:

  • 我正在运行 Rails 2.3.8 - 我试过了: def self.article_months group_by_clause = "DATE_FORMAT(created_at,'%M %Y')" Article.find(:all, :group => group_by_clause, :select => "#{group_by_clause} as month", :order => "created_at ASC") end 在我看来,我使用了: 但是文章。 article_months 不显示月份,尽管 sql 查询给了我正确的结果。
  • 因此,如果您的模型方法工作正常并返回所需的数据。您只需要查看视图助手以确保提供了正确的参数。不确定您是否可以仅使用 select,也许它是 select_tag(取决于您使用的是 form_for 还是 form_tag)。看看一些与表单相关的助手。如果您需要更多帮助,请告诉我。
【解决方案2】:

在我的控制器中我做了:

@startdates = ActiveRecord::Base.connection.select_rows("SELECT DISTINCT MONTH(start_date), YEAR(start_date) FROM schedules WHERE event_id IN (#{@events.map{|n| n.id}.join(',')}) ORDER BY start_date ASC;")

在我看来:

<%= select(:event, :startdate, @startdates.map{|s| ["#{t("date.month_names")[s[0].to_i]} #{s[1]}", "#{s[1]}-#{s[0]}"]}, {:selected => @startdate.to_s, :include_blank => "All"}) %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多