如何显示当月的参赛作品?

时间:2016-04-29 10:24:15

标签: ruby-on-rails ruby

为了便于解释,我正在编写一个用户可以记录其费用的应用程序。

在用户的节目视图中,我只想显示当月的用户费用。

我的费用表如下:

create_table "expenses", force: :cascade do |t|
  t.date     "date"
  t.string   "name"
  t.integer  "cost"
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
  t.integer  "user_id"
end

日期字段采用日期格式,如下所示:Thu, 14 Apr 2016

在我的控制器中,我有类似的东西:

def show
  month = Date.today.strftime("%m")
  @user = User.find(params[:id])
  @expenses = Expense.where(:user_id => @user.id, :date => month)
end

显然,这不会起作用,但我会猜测它会是这样的吗?

任何帮助都会很棒,谢谢!

2 个答案:

答案 0 :(得分:8)

通常你可以这样解决它:

Expense.where(date: (Date.today.beginning_of_month..Date.today.end_of_month))

其中定义了可用作BETWEEN x AND y子句的范围。

如果这是一项常见操作,您可能希望将日期表示为YYYYMM格式的单独列,以便轻松检索这些列。

答案 1 :(得分:2)

如果您正在使用MySQL,则可以使用提取功能来创建.where:

def show
  month = Date.today.strftime("%m")
  year  = Date.today.strftime("%y")
  @user = User.find(params[:id])
  @expenses = Expence.where('extract(month from `date`) = ? AND extract(year from `date`) = ? AND `user_id` = ?', month, year, @user.id)
end

没有经过测试,虽然它应该有用。

<强>来源:
https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html