Невозможно отобразить что-либо кроме страницы Rails по умолчанию - PullRequest
0 голосов
/ 10 июня 2019

Я следую инструкциям (https://blog.teamtreehouse.com/static-pages-ruby-rails) для рендеринга страницы с использованием маршрутов Rails. Проблема в том, что вместо страницы, которая должна отображаться, я получаю сообщение об ошибке. Я не знаю, что я делаю неправильно, посколькуЕсть буквально только несколько шагов.

Единственное отличие моего кода от учебника тривиально. Я использую Videos вместо Pages.

В config/routes.rb:

Rails.application.routes.draw do
    # This means that all paths following the pattern:
    # /videos/about, /videos/home, /videos/features
    # will route here!
    get "/videos/:video" => "videos#show"
end

In app/controllers/videos_controller.rb":

class VideosController < ApplicationController
    def show
        render template: "videos/#{params[:page]}"
    end
end

Наконец, у меня есть статическая страница, заполненная бредом, хранящаяся в app/views/videos/videos.html.erb.

Однако, когда я запускаю свойсервер и перейти к 0.0.0.0:3000/videos/ Я получаю следующую ошибку:

No route matches [GET] "/videos"
Rails.root: /home/mightu/Desktop/portal_rails

Когда я пытаюсь 0.0.0.0:3000/videos/pizza, я получаю:

Missing template /videos with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby, :coffee, :jbuilder]}. Searched in: * "/home/mightu/Desktop/portal_rails/app/views" 

Это говорит мне, что проблема в этой строке:

render template: "videos/#{params[:page]}"

Пожалуйста, помогите thx

Ответы [ 2 ]

2 голосов
/ 10 июня 2019

Вам нужно определить маршруты для /videos. Вы можете добавить resources :videos, если вам нужны все остальные маршруты, или просто get 'videos', to: 'videos#index'.

Вы только определили маршрут для show действие, но вы пытаетесь получить страницу index для видео, вы можете посмотреть детали маршрутизации здесь

1 голос
/ 11 июня 2019

Начните с выполнения:

Rails.application.routes.draw do
  resources :videos
end

Что даст вам:

     videos GET    /videos(.:format)             videos#index
            POST   /videos(.:format)             videos#create
  new_video GET    /videos/new(.:format)         videos#new
 edit_video GET    /videos/:id/edit(.:format)    videos#edit
      video GET    /videos/:id(.:format)         videos#show
            PATCH  /videos/:id(.:format)         videos#update
            PUT    /videos/:id(.:format)         videos#update
            DELETE /videos/:id(.:format)         videos#destroy

Затем переименуйте app/views/videos/videos.html.erb в app/views/videos/show.html.erb.

и измените свойshow действие над вашим VideosController в:

class VideosController < ApplicationController
  def show

  end
end

А теперь 0.0.0.0:3000/videos/pizza отобразит шаблон show.html.erb, и вы получите params[:id] со значением pizza.

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