2015-11-02 50 views
0

我的用户可以有很多问题,但问题是以不同的频率提出的。每周,每两周,每月一次,每季度一次。现在我将问题的频率存储在QuestionFrequency模型中。接受频率:字符串并开始:字符串。筛选和分割子对象

接受频率值是:

weekly 
biweekly 
monthly 
quarterly 

现在我与开始了解设置一起使用。因此,开始接受:

  • 如果双周我记下了一周号码,如果要它开始 (因此我可以检查是否是周数是奇数还是偶数)
  • 如果是每月节省“结束”或“开始”,因此我可以检查是否与轨道的月初。
  • 季度节省 “结束” 或 “开始”

因此我可以叫

question.question_frequency.frequency 

f.ex拿到4个接受的价值观之一。现在我想要做的是创建一个本周可能提供给用户的所有问题的分组列表。

我在叫all_questions用户模型,它是让所有的问题,是有关用户“这个”周其工作有一个方法。

# Collection of Users weekly questions 
    def all_questions 
    questions 
    end 
现在

我怎么可以过滤“问题”得到的东西像

if biweekly.odd? and Time.zone.now.strftime("%V").odd? 

然后添加问题,而假如一个是奇数||即使那样我们本周也不想要这个问题。

回答

0

我将采取不同的处理。

  1. 删除QuestionFrequency模型。
  2. Question添加frequency柱为一个整数,并使用Rails的Enum方法来定义的频率的名称。
  3. valid_at日期/日期时间列添加到Question型号,并根据频率将其设置为下一个有效日期(从现在开始1周,2周,1个月等)。

现在,一旦问题被显示给用户(或当它的回答),有问题的valid_at列的更新根据其频率:

##question.rb example 
enum frequency: [:weekly, :biweekly, :monthly] 

before_save :update_valid_at 

def update_valid_at 
    if weekly? 
    self[:valid_at] = 1.week.from_now 
    elsif biweekly? 
    self[:valid_at] = 2.weeks.from_now 
    elsif monthly? 
    self[:valid_at] = 1.month.from_now 
    end 
end 

这种方式,你可以改变你all_questions发送至:

def all_questions 
    questions.where('valid_at < ?', Date.today) 
end 
+0

我明白你要去哪里了,而且我正在尝试了解如何使其适应我的用例。用户每周都会回答一组属于问题的“答案”。这些问题是基于如果本周是该周回答的。在这里,你似乎试图验证问题的创建? –