2014-01-09 21 views
0

我有一个日期时间列在我的一个表(team_opps)称为start_date。试图定义使日期时间条目在星期几的方法

我想在我的模型中编写方法,允许将它们分类为星期一,星期二等......机会。

def self.friday_team_opps 
    where('WEEKDAY(start_date) = ?', 4) 
    end 

在我看来,我试图调用一个.each它。

<% TeamOpp.friday_team_opps.each do |team_opp| %> 
    <%= render team_opp, :team_opp => :team_opp %> 
    <% end %> 

错误是:

SQLite3::SQLException: no such function: WEEKDAY: SELECT "team_opps".* FROM "team_opps" WHERE (WEEKDAY(start_date) = 4) 

感谢

回答

1

首先,您需要通过将方法定义为def self.friday_team_opps来定义TeamOpp类中的方法。

此外,您不能调用列的方法,因为它需要ActiveRecord加载表中的所有数据,然后调用该数据的Ruby方法。你可以做的是使用直接的SQL函数,例如像MySQL的WEEKDAY(星期一= 0,周二= 1等):

def self.friday_team_opps 
    where("WEEKDAY(team_opps.created_at) = ?", 4) 
end 

SQLite中,你可以使用strftime功能(星期日= 0,星期一= 1等):

def self.friday_team_opps 
    where('strftime("%w", "created_at") = "?"', 5) 
end 
+0

我更新了我的代码,以显示我现在拥有的,这就是你的建议。现在遇到的错误是:SQLite3 :: SQLException:没有这样的函数:WEEKDAY:SELECT“team_opps”。* FROM“team_opps”WHERE(WEEKDAY(team_opps.start_date)= 4) – brad

+0

use this: def self。 friday_team_opps 其中('WEEKDAY(created_at)=?',4) 结束 – Egalitarian

+0

同样的错误。尽管我喜欢这种方法。仍然不喜欢周日的功能。 – brad

0

你将它定义为实例方法

def friday_team_opps 

它应该被定义为一个类的方法

def self.friday_team_opps 
+0

这是否改变了方法本身的内容? – brad

+0

self.will引用模型本身。在你的情况下 - 'TeamOpp'。这就是你想要的 –

0

如果你想成为一个实例函数,那么你应该使用这样

def friday_team_opps 
    return self.start_date.strftime("%A") 
end 

随后,你将不得不修改您的视图里关键字:

<% TeamOpp.select("start_date").each do |team_opp| %> 
    <%= team_opp.friday_team_opps() %> 
<% end %>