Как я могу исправить ошибку маршрутизации в приложении Ruby on Rails

#ruby-on-rails #ruby

Вопрос:

Я всегда получаю ошибки маршрутизации в этом файле Ruby на Rails для проекта. Это показывает мне ошибку маршрутизации, как вы можете видеть на скриншоте ниже.

Все драгоценные камни установлены правильно, он показывает мне домашнюю страницу, но не показывает мне файл проверки или страницу показа файла.

Вот мой код Routes.rb:

 Rails.application.routes.draw do
  get 'home/submission3'
  post 'home/checkFile'
  get 'home/showFiles'
  # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html

end
 

Вот изображение показанной ошибки:

Изображение

Вот мой код контроллера:

 # C:UsersattariRubymineProjectssubmission3appcontrollershome_controller.rb
require 'docx'
require 'find'
class HomeController < ApplicationController
  def submission3

  end
  def checkFile
    word = params[:folder][:word]
    path = params[:folder][:path]
    @files = checkWord(word, path)
    puts "FILES ARE #{@files}"
    redirect_to home_showFiles_path(@files)
    # puts "WORD IS #{word} PATH IS #{path}"
  end
  def save
    @submissions = submission3.new
  end
  def checkWord(userInput, folderInput)
    count = 0
    if (Dir.exist?(folderInput))
      docx_file_paths = []
      filtered_files = []
      Find.find(folderInput) do |path|
        docx_file_paths << path if path =~ /.*.docx$/
      end
      (0..docx_file_paths.length - 1).each { |i|
        d = Docx::Document.open(docx_file_paths[i])
        d.each_paragraph do |p|
          string_ = p.to_s()
          if (string_.include? userInput)
            puts docx_file_paths[i]
            filtered_files.append(docx_file_paths[i])
            count = count   1
            puts count
          else
            puts "No word Matched"
          end
        end
        puts count
      }
      return filtered_files
    else
      puts "No Directory exist"
    end
  end
  def create
    @submission3 = submission3.new(params[:word])
    if @submission3.save
      redirect_to new_submission_path
    end
  end
  private
  def book_params
    params.require(:book).permit(:title)
  end
end
 

Как я могу исправить эту ошибку routes.rb?

Комментарии:

1. Я могу поделиться своим полным zip-файлом проекта, если вы спросите меня, спасибо

Ответ №1:

Если вы посмотрите на сообщение об ошибке, вы увидите, что имя файла добавляется непосредственно к имени маршрута ( /home/showFiles.C:Users... ). Вам нужно добавить идентификатор к маршруту, чтобы Rails знал, чего там ожидать. Ваш маршрут должен выглядеть примерно так:

 get 'home/show_files/:file_name'
 

[Обратите внимание, что вам необходимо определить :file_name в контексте, где к этому будет осуществляться доступ (ваш контроллер).]

Еще лучше было бы использовать модель в качестве основы для вашего маршрута. Итак, если у вас есть (например) файловая модель, вы бы использовали:

 resources :files
 

и Rails автоматически сгенерирует для вас целую кучу маршрутов (или вы можете ограничить маршруты, сделав что-то подобное resources :files, only: [:show, :index, :create, :delete] ).

В принципе, я думаю, вам нужно больше прочитать о том, как должны работать рельсы и, в частности, маршруты. Железнодорожные направляющие, вероятно, хорошее место для начала. Если вы будете работать с Rails и его соглашениями, ваша жизнь станет намного проще! Rails предпочитает условности конфигурации!

Кроме того, из-за второстепенной проблемы вы не соблюдаете соглашение Rails при именовании своих методов и переменных. camelCase используется в именах объектов (например class HomeController ), но не именах методов или имен переменных — Rails использует для них snake_case. Опять же, если вы будете придерживаться соглашения Rails ( show_files не showFiles , например), вы обнаружите, что все идет намного более гладко. Следование условностям Rails означает, что Rails будет легко сшивать для вас вещи; не следуйте им, и Rails станет полным кошмаром.

Ответ №2:

Основываясь на ошибке, похоже, что вы пытаетесь получить доступ /submission3 к маршруту, даже если вы определили /home/submission3 маршрут. Обновление маршрута должно исправить вашу ошибку маршрутизации.

Комментарии:

1. как его обновить, братан, не мог бы ты, пожалуйста, помочь с этим