ActionView:: Template::Error (PG:: UndefinedColumn: ERROR: column не существует)

модель

Попытка 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

рельсы 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 ответа

  1. Не запрос postgres, но вы можете достичь его по рельсам

    def next_user_challenge
      user.challenges.select{ |ch| ch.challenge_date > challenge_date }.sort_by(&:challenge_date).first
    end
    

    Примечание: при этом будут извлечены все вызовы из БД, а затем выберите допустимый.

    Я предложу создать новый столбец в таблице задач и использовать ActiveModal callbacks для его обновления.

  2. Вы используете атрибут не модель базы данных для запроса данных, и, конечно, он не будет работать.

    Чтобы решить эту проблему, есть 2 способа:

    1. Использовать Deepak путь

    2. Используйте raw SQL query, таким образом, вы должны подготовить challenge_dateи объединить с self table для обработки другого запроса.