Как исправить ошибку 'ActionController :: RoutingError (неинициализированная константа someController)' в ruby ​​на рельсах 5 - PullRequest
0 голосов
/ 31 декабря 2018

Я работаю над API, который принимает конкретные данные, создает PDF-файл и отправляет его по электронной почте, используя rails 5. После настройки маршрутов / контроллеров / модели я продолжаю получать ActionController::RoutingError (uninitialized constant InfluencerreportsController).

IЯ занимался серфингом в Интернете, пытаясь найти решение, и хотя есть много других с такой же ошибкой, ни одно из их решений не сработало для меня.Насколько я могу судить, ошибка означает, что мои имена файлов и контроллер не совпадают, но опечаток нигде нет.Мне известно об ошибке «1004», но я попытался сменить контроллер на это имя, но ничего не получилось.Возможно, мне придется изменить его и в других местах?

Еще одна вещь, о которой стоит упомянуть, это то, что я использовал rails generate для всего (контроллеров, моделей и миграций), поэтому я сам не создавал никаких файлов..

Это мой первый раз, когда я имею дело с nested_attributes, поэтому я не уверен, правильно ли я это сделал или это могло вызвать проблему.

Заранее спасибо!

Вот мой каталог проекта:

Я не могу публиковать изображения из-за отсутствия репутации, но имя моего контроллера - influencer_reports_controller.rb

influenr_reports_controller.rb:

class InfluencerReportsController < ApplicationController

  def create
    @report = InfluencerReport.create!(influencerreport_params)
    json_response(@report, :created)
  end

  private

  def influencerreport_params
    params.require(:influencerreport).permit(:instagram_handle,
                                             :email,
                                             :city,
                                             :post_price_by_category,
                                       :post_price_by_category_engagements,
                                         :post_price_by_avg_engagements,
                                         photos_attributes: [
                                           :industry,
                                           :likes,
                                           :comments
                                           ])
  end
end

influenr_report_model.rb:

class InfluencerReport < ApplicationRecord
  # model assocation
  has_many :photos, inverse_of: :influencerreport

  # validations
  validates_presence_of :instagram_handle,
                        :email,
                        :city,
                        :post_price_by_category,
                    :post_price_by_category_engagements,
                    :post_price_by_avg_engagements

  accepts_nested_attributes_for :photos
end

rout.rb:

Rails.application.routes.draw do
  # For details on the DSL available within this file, see 
http://guides.rubyonrails.org/routing.html

  resources :influencerreports, only: [:create] do
    resources :photos, only: [:create]
  end
end

сообщение об ошибке:

Started POST "/influencerreports" for 127.0.0.1 at 2018-12-29 06:03:07 -0600

ActionController::RoutingError (uninitialized constant InfluencerreportsController):

activesupport (5.0.7.1) lib/active_support/inflector/methods.rb:268:in `const_get'
activesupport (5.0.7.1) lib/active_support/inflector/methods.rb:268:in `block in constantize'
activesupport (5.0.7.1) lib/active_support/inflector/methods.rb:266:in `each'
activesupport (5.0.7.1) lib/active_support/inflector/methods.rb:266:in `inject'
activesupport (5.0.7.1) lib/active_support/inflector/methods.rb:266:in `constantize'
actionpack (5.0.7.1) lib/action_dispatch/http/request.rb:81:in `controller_class'
actionpack (5.0.7.1) lib/action_dispatch/routing/route_set.rb:44:in `controller'
actionpack (5.0.7.1) lib/action_dispatch/routing/route_set.rb:30:in `serve'
actionpack (5.0.7.1) lib/action_dispatch/journey/router.rb:39:in `block in serve'
actionpack (5.0.7.1) lib/action_dispatch/journey/router.rb:26:in `each'
actionpack (5.0.7.1) lib/action_dispatch/journey/router.rb:26:in `serve'
actionpack (5.0.7.1) lib/action_dispatch/routing/route_set.rb:727:in `call'
rack (2.0.6) lib/rack/etag.rb:25:in `call'
rack (2.0.6) lib/rack/conditional_get.rb:38:in `call'
rack (2.0.6) lib/rack/head.rb:12:in `call'
activerecord (5.0.7.1) lib/active_record/migration.rb:553:in `call'

Существует еще одно сообщение об ошибке, но я чувствовал, что нет необходимости отправлять сообщения.

1 Ответ

0 голосов
/ 01 января 2019

Ваш контроллер называется InfluencerReportsController, и в вашем сообщении об ошибке говорится, что приложение ищет контроллер InfluencerreportsController.Попробуйте изменить ваши маршруты на:

Rails.application.routes.draw do
  # For details on the DSL available within this file, see 
http://guides.rubyonrails.org/routing.html

  resources :influencer_reports, only: [:create] do
    resources :photos, only: [:create]
  end
end

Это должно позволить рельсам узнать правильный корпус для контроллера.

...