Rails - PG :: DatatypeMismatch: ОШИБКА - PullRequest
0 голосов
/ 24 апреля 2018

Так что это очень начинающий вопрос, я получаю следующую ошибку.Я знаю, что мне нужно преобразовать его в строковый тип.Я перепробовал много способов конвертации, но пока не работал.Жесткое кодирование этого поля как что-то вроде '2018-01-01' работает.Содержание параметров, которое я получаю, верное.Это тип, который создает эту ошибку.Я даже пытаюсь преобразовать его в тип даты, проверил тип и вернул true, но все равно не получилось.Дайте мне знать, если это имеет смысл.

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.Так что я думаю, что я должен пойти с действием создания.Пожалуйста, дайте мне знать, что я делаю неправильно.

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

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

Если вы все еще хотите использовать прямой 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
0 голосов
/ 24 апреля 2018

Вы могли бы сделать что-то вроде created_at = Date.parse(params[:created_at]), но я не думаю, что это необходимо. Еще немного информации может быть полезно. Ваши параметры типа integer?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...