Sql 正在尝试定义按星期几创建datetime条目的方法
在我的一个表(team_opp)中有一个名为start_date的datetime列 我试图在我的模型中编写方法,允许我将它们分类为星期一、星期二等。。。机会Sql 正在尝试定义按星期几创建datetime条目的方法,sql,ruby-on-rails,Sql,Ruby On Rails,在我的一个表(team_opp)中有一个名为start_date的datetime列 我试图在我的模型中编写方法,允许我将它们分类为星期一、星期二等。。。机会 def self.friday_team_opps where('WEEKDAY(start_date) = ?', 4) end 在我看来,我正试图给每个人打电话 <% TeamOpp.friday_team_opps.each do |team_opp| %> <%= render t
def self.friday_team_opps
where('WEEKDAY(start_date) = ?', 4)
end
在我看来,我正试图给每个人打电话
<% TeamOpp.friday_team_opps.each do |team_opp| %>
<%= render team_opp, :team_opp => :team_opp %>
<% end %>
感谢您将其定义为实例方法
def friday_team_opps
它应该被定义为一个类方法
def self.friday_team_opps
首先,您需要通过将方法定义为
def self.fride\u team\u opps
来定义TeamOpp类上的方法
此外,您不能对该列调用方法,因为它需要ActiveRecord加载表中的所有数据,然后对该数据调用Ruby方法。您可以使用直接SQL函数,例如MySQL(星期一=0,星期二=1,等等):
在SQLite中,可以使用函数(星期日=0,星期一=1,等等):
如果你想让它成为一个实例函数,那么你应该像这样使用它
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 %>
这会改变方法本身内部的内容吗?self.com将引用模型本身。在您的情况下-TeamOpp
。这就是你想要的。我更新了上面的代码,以显示我现在拥有的,这就是你的建议。我现在遇到的错误是:SQLite3::SQLException:没有这样的函数:WEEKDAY:选择“team_opps”。*从“team_opps”中(WEEKDAY(team_opps.start_date)=4)使用这个:def self.friday_team_opps WHERE('WEEKDAY(created_at)=?',4)结束相同的错误。不过我喜欢这种方法。仍然不喜欢平日函数。不幸的是,这些SQL函数是特定于供应商的,我已经用SQLite的解决方案更新了答案;)谢谢-非常好!我的观点是这样的,这是最佳实践吗?我的模型中有足够多的方法,因此控制器中不需要实例变量。
def self.friday_team_opps
where('strftime("%w", "created_at") = "?"', 5)
end
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 %>