2015-11-02 5 views
0

У моего пользователя может быть много вопросов, однако вопросы задаются на разных частотах. Как еженедельно, раз в две недели, ежемесячно, ежеквартально. Теперь я храню частоту вопроса в модели QuestionFrequency. Это принимает частоту: string и начинается: string.фильтрация и сегментация дочернего объекта

Значения, принимаемые для частоты являются:

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. Добавить столбец frequency в Question как целое число и использовать метод Rails Enum для определения имен частот.
  3. Добавьте столбец даты/даты и времени 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

Я вижу, куда вы направляетесь, и я пытаюсь понять, как я могу адаптировать его к моему прецеденту. Каждую неделю пользователь отвечает на набор ответов, относящихся к вопросу. Вопросы заполняются в зависимости от того, на какой неделе будет отвечать эта неделя. Здесь кажется, что вы пытаетесь подтвердить вопрос? –

Смежные вопросы