Sql 正在尝试定义按星期几创建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

在我的一个表(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 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 %>