尝试1
def challenge_date
deadline || date_started
end
尝试2
def challenge_date
if deadline != date_started
[deadline, date_started].reject(&:blank?).join()
else
date_started
end
end
两次尝试都给出了错误。我需要这个方法来迭代next_user_challenge
def next_user_challenge
user.challenges.where('challenge_date > ?', challenge_date).order('challenge_date ASC').first
end
# some challenges will just have a deadline
id: 1,
name: "Publish a Novel",
deadline: Sat, 26 Nov 2016,
date_started: nil,
user_id: 117,
# some challenges will just have a date_started
id: 2,
name: "Write a Chp",
deadline: nil,
date_started: Thu, 20 Oct 2016,
user_id: 117,
# and some challenges will have both
id: 3,
name: "Run a Mile",
deadline: Thu, 26 Sep 2016,
date_started: Thu, 26 Sep 2016, # If challenge has both deadline and date_started then date_started will be the same date as the deadline
user_id: 117,
答案 0 :(得分:0)
不是postgres查询,但你可以实现它的轨道方式
def next_user_challenge
user.challenges.select{ |ch| ch.challenge_date > challenge_date }.sort_by(&:challenge_date).first
end
注意:这将从db获取所有挑战,然后选择有效的挑战。
我建议在challenge表中创建一个新列,并使用ActiveModal回调来更新它。
答案 1 :(得分:0)
您使用的不是数据库模型属性来查询数据,当然它不起作用。
要解决此问题,有两种方法:
使用Deepak方式
使用原始SQL查询,这样就应该准备challenge_date
并加入自我表来处理其他查询。