@mirbook

Как правильно написать код для определенного вложенного роута?

Добрый день, хочется чтоб выводилось: engines/:brand_id/:id, но как это сделать?)

В модельках использую has_many
has_many :engines;

и belongs to соответственно
belongs_to :brand;

имеется отдельно controllers/admin/brands_controller и controllers/admin/engines_controller
которые создают в админке
/admin/engines/:id
/admin/brands/:id

отдельный контроллер - controllers/engines_controller.rb
class EnginesController < ApplicationController
  add_breadcrumb "Главная", :root_path
  add_breadcrumb "Двигатели", :engines_path

  def index
    @brands = Brand.all
    @engines = Engine.all
  end

  def show
    @engine = Engine.friendly.find(params[:id])
    add_breadcrumb "#{@engine.name}".html_safe
    set_meta_tags(title: @engine.title,
                     description: @engine.description,
                     keywords: @engine.keywords,)
  end
end


views/engines/index.html.erb
<div class="content row">
                <nav>
                  <ol class="breadcrumb">
                    <li class="breadcrumb-item"><%= render_breadcrumbs :separator => ' -> ' %></li>
                  </ol>
                </nav>                
                <h1>Новости</h1>
                <div class="engines">  
                <% @engines.each do |engine| %>
                  <div class="engines__row row">
                    <div class="engines__image"><%= link_to image_tag(engine.image.url(:thumb)), engine_path(engine.brand,engine)
                     %></div>
                    <div class="engines__text">
                        <h3><%= link_to engine.name, engine_path(engine.brand, engine) %></h3>
                        <div class="date"><%= engine.price %></div>
                        <div class="date"><%= engine.displacement %></div>
                        <div class="date"><%= engine.brand.name %></div>
                        </div>
                  </div>
                <% end %>  
                </div>


views/engines/show.html.erb
<div class="content row">
    <div class="news-page">
                <nav>
                  <ol class="breadcrumb">
                    <li class="breadcrumb-item"><%= render_breadcrumbs :separator => ' -> ' %></li>
                  </ol>
                </nav>

                <div class="news-page__title">
                <h1><%= @engine.name %></h1>
                <h1><%= @engine.brand %></h1>
                <h1><%= @engine.price %></h1>
                </div>

                <div class="news-item__wrapper">
                <div class="inner-page__body">
                   <%= raw @engine.content %>
                </div>
                </div>
                </div>
                </div>


routes.rb
Rails.application.routes.draw do
  mount Ckeditor::Engine => '/ckeditor'
  namespace :admin do
    root to: 'main#index'
    get 'main/index'
    
    resources :text_zones
    resources :news, except: :show
    resources :engines, except: :show
    resources :brands
  end


  root to: "application#index"
  resources :text_zones

  resources :news, only: [:index, :show]

  get 'engines/', to: 'engines#index'
  get 'engines/:brand_id/:id', to: 'engine#show', as: :engine


Вьюха views/engines/index.html.erb выводится норм, но при нажатии на отдельный engine выдает ошибку:
IUA4LZqhQoCDix68IuzpKw.png

id видны:
r0vlzVapSSetFLGH6U1YLg.png

Подскажите что не так делаю, и как лучше сделать?
  • Вопрос задан
  • 67 просмотров
Решения вопроса 1
@lebron32rus
Senior Software Engineer
Вложенные маршруты описываются так:

resources :brands do
  resources :engines
end
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы