小编Gra*_*man的帖子

Cron的工作不在每当宝石工作

我有一个包含大量任务的应用程序,每天我都想运行一个cron作业,为数据库中的每个Task创建一个DayTask.任务has_many DayTasks和这些daytasks是用户每天将要检查的.我正在使用随时随地的宝石,但它似乎根本没有运行.有任何想法吗?

配置/ schedule.rb

every 1.day, :at => "12:01am" do
  runner "Task.generate_tasks_for_day"  
end
Run Code Online (Sandbox Code Playgroud)

Task.rb

  def generate_tasks_for_day
    Task.all.each do |task|
      task.day_tasks.create(:target_date => Date.today)
    end 
  end 
Run Code Online (Sandbox Code Playgroud)

运行'when命令'的结果

1 0 * * * /bin/bash -l -c 'cd /home/grant/rails_projects/GoalTwist && script/rails runner -e production '\''Task.generate_tasks_for_day'\'''
Run Code Online (Sandbox Code Playgroud)

注意:每次我想测试运行时,我一直在更改config/schedule.rb中的时间.

ruby cron ruby-on-rails whenever

17
推荐指数
2
解决办法
2万
查看次数

Ruby'.find'方法只返回第一次出现

我有如下模型:用户has_many目标,目标has_many任务,任务has_many day_tasks.我正在尝试编写一个找到所有day_tasks的方法

  1. 属于某个用户
  2. :target_date == Date.today(target_date处于day_tasks表中的列).

我想把结果放到@day_tasks数组中.

我的代码:

@user = current_user
@day_tasks = DayTask.find { |x| x.task.goal.user == @user && x.target_date == Date.today }
Run Code Online (Sandbox Code Playgroud)

此代码仅返回符合这些条件的第一条记录.我也尝试使用DayTasks.where方法在大括号中使用相同的代码,但我只是"错误的参数数量(0表示1)"错误.有人可以解释为什么我的方法只返回第一次出现以及.find和.where之间究竟有什么区别?

ruby ruby-on-rails

9
推荐指数
1
解决办法
2万
查看次数

具有多态模型的嵌套形式

我正在制作一个具有以下属性的应用程序,我正在创建一个单一的表单,以便能够保存一个目标、一个目标的任务、一个目标的里程碑和一个里程碑的任务。

#app/models/goal.rb
  has_many :tasks, :as => :achievement
  has_many :milestones
  accepts_nested_attributes_for :tasks
  accepts_nested_attributes_for :milestones

#app/models/milestone.rb
  belongs_to :goal
  has_many :tasks, :as => :achievement

#app/models/task.rb
  belongs_to :achievement, :polymorphic => true
Run Code Online (Sandbox Code Playgroud)

每当我用它的属性保存目标时,任务模型似乎对它们属于什么成就类型感到困惑,导致每个里程碑任务都被列为目标任务。我的表单、部分和控制器代码如下。

形式:

<%= nested_form_for @goal do |f| %>

  <%= render 'shared/error_messages', :object => f.object %>
  <%= render 'shared/goal_fields', :f => f %>

  <%= f.fields_for :milestones do |ff| %>
    <%= render 'shared/milestone_fields', :f => ff %>
  <% end %> 

  <%= f.fields_for :tasks do |ff| %>
    <%= render 'shared/task_fields', :f => ff %>
  <% end …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails nested-forms form-for polymorphic-associations ruby-on-rails-3

5
推荐指数
1
解决办法
5303
查看次数

修补一个方法而不改变该方法的工作方式?

我正在尝试测试是否使用某些值调用 pandas 方法。

然而,仅仅通过应用 @patch 装饰器就会导致修补的方法在 pandas 中抛出 a ValueError,而实际方法不会。我只是想测试正在Stock.calc_sma调用底层pandas.rolling_mean函数。

我假设@patch装饰器基本上向我正在修补的东西添加了一些“神奇”方法,这些方法允许我检查函数是否被调用。如果是这种情况,为什么pandas.rolling_mean无论修补与未修补该函数的行为不一样?

应用程序/模型.py

import pandas as pd
class Stock:  # i've excluded a bunch of class methods, including the one that sets self.data, which is a DataFrame of stock prices.
    def calc_sma(self, num_days)
        if self.data.shape[0] > num_days:  # Stock.data holds a DataFrame of stock prices
                column_title = 'sma' + str(num_days)
                self.data[column_title] = pd.rolling_mean(self.data['Adj Close'], num_days)
Run Code Online (Sandbox Code Playgroud)

应用程序/测试/TestStockModel.py

def setUp(self):
    self.stock = MagicMock(Stock)
    self.stock.ticker …
Run Code Online (Sandbox Code Playgroud)

python patch mocking pandas

1
推荐指数
1
解决办法
1959
查看次数