我的一个表(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)
由于
答案 0 :(得分: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函数(sunday = 0,monday = 1等):
def self.friday_team_opps
where('strftime("%w", "created_at") = "?"', 5)
end
答案 1 :(得分:0)
您将其定义为实例方法
def friday_team_opps
它应该被定义为类方法
def self.friday_team_opps
答案 2 :(得分: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 %>