Так что это вопрос для новичков, я получаю следующую ошибку. Я знаю, что мне нужно преобразовать его в строковый тип. Я перепробовал множество методов преобразования, но пока не работал. Жесткое кодирование этого поля как что-то вроде «2018-01-01» работает. Содержимое параметров, которое я возвращаю, верное. Это тип, который создает эту ошибку. Я даже пытаюсь преобразовать его в тип даты, протестировал тип и вернул истину, но все равно не преуспел. Дайте мне знать, если в этом есть смысл.
PG::DatatypeMismatch: ERROR: column "order_date" is of type date but expression is of type integer
Мой экспрессон
created_at = (params[:created_at])
Попробовал
created_at = (params[:created_at]).to_date
created_at = (params[:created_at]).to_s
Я пытаюсь получить params[:created_at] из полезной нагрузки и использовать следующий код для вставки в psql. Поэтому я думаю, что мне следует использовать действие create. Пожалуйста, дайте мне знать, что я делаю не так.
def create
created_at = (params[:created_at])
puts created_at
sql = "insert into api.salesorder(site, order_date,sale_type,sales_rep,terms,customer_number) values('WHS',#{created_at},'CUST','HOUSE','PRE','123456')"
results = ActiveRecord::Base.connection.execute(sql)
end
В вашем сообщении об ошибке указано order_date, но в примере кода используется created_at - с каким из них у вас возникли проблемы? В рельсах created_at и updated_at устанавливаются автоматически - вам не нужно с ними ничего делать.
Пожалуйста, посмотрите сообщение еще раз для получения дополнительных кодов. Очень плохо получается. Еще раз спасибо!
Можете ли вы поделиться формой или интерфейсом, передаваемым в параметре created_at?
module.exports = function(payload, actions) { let createdDate = payload.created_at.split("T")[0].toString(); return actions.http.post(process.env.DATABASE_URL, {created_at: createdDate}).then(({ data }) => { console.info('data is ', data) }) }




Вы могли бы сделать что-то вроде created_at = Date.parse(params[:created_at]), но я не думаю, что это необходимо. Дополнительная информация может оказаться полезной. Ваши параметры относятся к типу integer?
Этого не должно быть, но в сообщении об ошибке говорится, что это целочисленный тип. Данные, которые я просматриваю в своем терминале / журналах, отображаются в виде строки. Пожалуйста, посмотрите сообщение еще раз, чтобы увидеть мои правки и другие коды
Пробовал ваш метод, он все еще возвращает следующую ошибку. (PG :: DatatypeMismatch: ОШИБКА: столбец "order_date" имеет тип date, но выражение имеет тип integer
Какой класс у params[:created_at]? Используйте binding.pry в методе создания и определите класс params[:created_at].
Думаю, я понял, в чем моя проблема. Я не должен использовать интерполяцию с запросами sql.
Я не понимаю, зачем вы пишете SQL-запросы? Строка параметров перед отправкой также может решить вашу проблему.
Если вы все еще хотите использовать прямой SQL (чего я не рекомендую в Rails, поскольку Rails выполняет SQL за вас), вам необходимо изменить его, чтобы заключить дату в одинарные кавычки.
sql = "insert into api.salesorder(site, order_date, sale_type,sales_rep, terms, customer_number) values('WHS','#{created_at}','CUST','HOUSE','PRE','123456')"
Лучшим решением было бы использовать Rails для выполнения работы с SQL за вас. Что-то вроде этого:
# in app/models/salesorder.rb
class Salesorder < ActiveRecord::Base
end
# in app/controller/salesorder_controller.rb
class SalesorderController < ApplicationController
def create
@salesorder = Salesorder.new
@salesorder.order_date = params[:created_at]
@salesorder.site = 'WHS'
@salesorder.sale_type = 'CUST'
@salesorder.sales_rep = 'HOUSE'
@salesorder.terms = 'PRE'
@salesorder.customer_number = '123456'
if @salesorder.save
redirect_to @salesorder, notice: 'Salesorder was successfully created.'
else
render :new
end
end
end
OMG, спасибо вам большое! Не знал, что мне нужно было поставить кавычки на # {переменную}. Что касается лучшего решения, я знаю, что мне не следует использовать прямой SQL, но это сервер / база данных, живущая за пределами моего компьютера, и я даже не уверен, как получить к нему доступ через метод рельсов, если не прямой sql (я очень новичок у этого А_А). Еще раз спасибо!
Если ваш
param[:created_at]правильный, вам не нужно ничего с ним делать. Может быть, дайте нам еще несколько примеров кода, и мы сможем помочь.