ActionView :: Template :: Error(PG :: UndefinedColumn:ERROR:列不存在)

时间:2016-11-01 09:21:16

标签: ruby-on-rails ruby

模型

尝试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

rails c

# 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,

2 个答案:

答案 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)

您使用的不是数据库模型属性来查询数据,当然它不起作用。

要解决此问题,有两种方法:

  1. 使用Deepak方式

  2. 使用原始SQL查询,这样就应该准备challenge_date并加入自我表来处理其他查询。