Я в настоящее время пытается высохнет этот начальный многословный код:Рефакторинг в модели: что случилось?
def planting_dates_not_nil?
!plant_out_week_min.blank? || !plant_out_week_max.blank? || !sow_out_week_min.blank? || !sow_out_week_max.blank?
end
def needs_planting?(week)
if !plant_out_week_min.blank? && !plant_out_week_max.blank?
(plant_out_week_min..plant_out_week_max).include? (week)
end
end
def needs_sowing?(week)
if !sow_out_week_min.blank? && !sow_out_week_max.blank?
(sow_out_week_min..sow_out_week_max).include? (week)
end
end
def needs_harvesting?(week)
if !harvest_week_min.blank? && !harvest_week_max.blank?
(harvest_week_min..harvest_week_max).include? (week)
end
end
вот моя intial попытка:
def tasks_for_week(week,*task_names)
task_names.each do |task_name|
to_do_this_week = []
unless read_attribute(task_name).nil?
if (read_attribute("#{task_name}_week_min")..read_attribute("#{task_name}_week_max")).include? (week)
to_do_this_week << task_name
end
end
end
end
Однако, когда я запускаю этот код в консоли следующим образом:
p.tasks_for_week(Date.today.cweek, :plant_out, :sow_out])
Я получаю неожиданный результат ... даже если растение не нужно высаживать, я все равно получаю массив имен заданных задач ([: plant_out,: sow_out]
Может ли кто-нибудь сообщить мне, как бы я очистил это, и у вас есть метод tasksforweek, который возвращает ожидаемые результаты?
ТИА
Еще раз спасибо Squeegy за то, что нашли время, чтобы рефакторировать это так полностью. Действительно помогая мне понять основы. Я предполагаю, что я могу использовать select вместо find_all. –
Код выше не работает, поскольку self ["task_name"] всегда терпит неудачу (должно быть task_name_weeks_min и task_name_weeks_max). Я включил измененный код ниже. Можете ли вы посмотреть, как реорганизовать дальше? –
well self [имя_задачи] должен был отражать «если только read_attribute (имя_задачи) .nil?». Но, похоже, у вас есть правильная идея. Выглядит неплохо. –