我正在尝试在索引视图中显示当前月份和年份的销售交易 这就是我在销售控制器中的内容:
def index
@sales = show_sales_for_current_month(@sales)
在SalesHelper中使用此方法
def show_sales_for_current_month(sales)
sales = Sale.find(:all,
:conditions => ["MONTH(date) = ? AND YEAR(date) =?",
Date.today.month, Date.today.year])
end
其中date是日期数据类型。
但是我收到以下控制器错误:
SQLite3::SQLException: no such function: MONTH: SELECT "sales".* FROM "sales" WHERE (MONTH(date) = 4 AND YEAR(date) =2011)
我看过帖子,看起来这是正确的功能,所以我做错了什么?谢谢!
答案 0 :(得分:4)
嘿那里,我有一个名为by_star的宝石可以帮助你解决这些问题。在您的情况下,您只需要在控制器中执行此操作:
@sales = Sale.by_month
by_star负责计算出它的月份和年份,以及凌乱的SQL。
答案 1 :(得分:3)
SQLite3中不存在MONTH和YEAR函数。您可以采取这样的方法(取自我当前的项目):
model entry.rb:
def self.all_entries_year(year, user_id)
where('entries.user_id = :id', :id => user_id ).
where(':first_day <= entries.date AND entries.date <= :last_day', {
:first_day => Date.new(year, 1, 1),
:last_day => Date.new(year, 12, 31)
}).
order('date desc')
end
编辑:
将它放在您的模型中:sales.rb(我假设它有字段日期)
def self.show_sales_for_current_month(year, month)
mydate = Date.new(year, month, 1)
where(':first_day <= sales.date AND sales.date <= :last_day', {
:first_day => mydate,
:last_day => mydate.at_end_of_month
}).
order('date')
end
答案 2 :(得分:0)
在MySQL中这是有效的,但您使用的是SQLite3,因此您需要修改查询以使用MONTH和YEAR的SQLite3版本,这意味着使用strftime函数:
sales = Sale.find(:all,
:conditions => ["strftime('%m', date) = '?' AND strftime('%Y', date) = '?'",
'%02d' % Date.today.month, Date.today.year])