#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. как его обновить, братан, не мог бы ты, пожалуйста, помочь с этим