2016-11-01 2 views
0

Ошибка возникает, когда я пытаюсь отправить форму с использованием сильных параметров в среде продуктов Heroku. В журнале приложений говорит следующее:Только ошибка Heroku: неопределенный метод `write_from_user 'в Rails на Heroku, но все работает в dev

2016-11-01T05:20:15.948227+00:00 app[web.1]: [7a7a60bf-b9bf-404d-890e-3692ba99bad0] Completed 500 Internal Server Error in 12ms (ActiveRecord: 2.8ms) 
2016-11-01T05:20:15.949267+00:00 app[web.1]: [7a7a60bf-b9bf-404d-890e-3692ba99bad0] 
2016-11-01T05:20:15.949316+00:00 app[web.1]: [7a7a60bf-b9bf-404d-890e-3692ba99bad0] NoMethodError (undefined method `write_from_user' for nil:NilClass): 
2016-11-01T05:20:15.949353+00:00 app[web.1]: [7a7a60bf-b9bf-404d-890e-3692ba99bad0] 
2016-11-01T05:20:15.949490+00:00 app[web.1]: [7a7a60bf-b9bf-404d-890e-3692ba99bad0] app/controllers/gdrs_controller.rb:12:in `create' 

Я использую Rails5 в разработчика и прод с БД Postgres. Все работает отлично в dev. Есть ли разница в том, как Heroku передает url params?

Вот мой код от создания действия:

def create 
    @des = Designer.where(email: Rails.application.secrets.design_lead_email) 
    @gdr = Gdr.new(secure_params) 
    @gdr[:uuid] = SecureRandom.hex(5) 
    @gdr.designer = @des 
    @gdr[:status] = "Queued" 
    if @gdr.save! 
    VisitorMailer.gdr_created_email(@gdr).deliver_now 
    DesignerMailer.gdr_created_email(@gdr).deliver_now 
    redirect_to gdr_url(@gdr[:uuid]) 
    else 
    render :new 
    end 
end 

И действие secure_params:

private 

def secure_params 
    params.require(:gdr).permit(:uuid, :client_name, :email, :dept, :ext, :cost_centre, :activity_type, :project_name, :description, :size, :quantity, :colour, :quote, :rush, :rush_desc, :proof_date, :print_date, :delivery_instructions, :reprint, :old_gl, :server_path_to_files, :activity_code) 
end 

Я использую Завещание для создания модели дизайнера.

+0

Не могли бы вы разместить объявление от gdrs_controller? –

+0

Я все еще пытался отследить проблему безрезультатно. Запуск в dev, с той же базой данных postgres, все работает нормально. Когда я пытаюсь создать новые объекты ActiveRecord, используя Gdr.new (params), даже через консоль rails, я получаю похожие ошибки по строкам «undefinied method» write_from_user. Есть ли способ доступа к более подробным журналам postgres на heroku? – aphid

+0

Я удалял и повторно развертывал приложение много раз, выполняю миграцию снова и снова, и это всегда одно и то же. Когда я пытаюсь создать отношения ActiveRecord через командную строку, команда Gdr.new (params) сохраняет только некоторые из значений. каждый раз, но между ними нет общего фактора (т. е. некоторые из них, которые сохраняются, - это простые строки, другие целые числа и т. д.). Что может случиться! Это безумие! – aphid

ответ

0

Кажется, что вы пытаетесь позвонить write_from_user по телефону nilobject. Используйте что-то вроде этого your_object.try(: write_from_user) для обработки ноль. Будет более понятно, если вы можете опубликовать свой код контроллера.

+0

Хорошо, я добавил, код от создателя контроллера тоже @Deepak – aphid

+0

Я уверен, что ошибка вызвана моим методом secure_params, но я не могу понять, почему. Он отлично работает в dev в той же базе данных. – aphid

+0

Похоже на это имеет какое-то отношение к базе данных postgres (которая отличается от sqlite db, используемой в dev). Не все параметры сохраняются в db, как и должно быть, не существует какого-либо правила о том, какие значения будут сохранены, кроме того, что каждый раз они будут одинаковыми. Должен ли я открыть новую тему для этого вопроса? – aphid

0

Исправлено! Я понял, что действие create не срабатывает, потому что я неправильно настроил actionmailer. Я думаю, что это как-то рушилось через посредство ddatabas commit.

Уроки были изучены. Глобальная регистрация ошибок включена.

Смежные вопросы