Ошибка метода приватного контроллера rails "не удается найти альбом без идентификатора" - PullRequest
0 голосов
/ 11 апреля 2020

Я пытаюсь отобразить все альбомы на странице # указателей альбомов, но в контроллере альбомов появляется ошибка «не удается найти альбом без идентификатора». Я понимаю, что проблема заключается в том, что нет никаких параметров, но я несколько раз использовал в моем приложении метод find с параметрами [: id] и до сих пор не сталкивался с этой проблемой.

Для справки , Альбомы имеют много обзоров и много пользователей через обзоры. У пользователей много Обзоров и много Альбомов через Обзоры.

Я еще не построил свой контроллер Обзоров, так что это не связано.

Вот ошибка:

ActiveRecord::RecordNotFound in AlbumsController#index
Couldn't find Album without an ID
Extracted source (around line #40):
38
39
40
41
42
43


    def set_album
        @album = Album.find(params[:id])
    end

    def album_params

Rails.root: /Users/melc/review_project

Application Trace | Framework Trace | Full Trace
app/controllers/albums_controller.rb:40:in `set_album'
Request
Parameters:

None

Вот мой контроллер Albums:

class AlbumsController < ApplicationController
    before_action :set_album, only: [:index, :show, :edit, :update]

    def index
        @albums = Album.all
        @current_user
    end

    def show
    end

    def new
        @album = Album.new
    end

    def create
        @album = Album.new(album_params)
        if @album.save
            redirect_to album_path(@album)
        else
            render :new
        end
    end

    def edit
    end

    def update
        if @album.update(album_params)
            redirect_to album_path(@album), notice: "Your album has been updated."
        else
            render 'edit'
        end
    end

    private

    def set_album
        @album = Album.find(params[:id])
    end

    def album_params
        params.require(:album).permit(:artist, :title, :avatar)
    end
end

Вот мои альбомы # индексный просмотр:

<h2>All Albums</h2>
<br>
<br>
<% if @album.avatar.attached? %>
    <image src="<%=(url_for(@album.avatar))%>%" style="width:350px;height:350px;">
<% end %>
<br>
<%= @album.artist %> -
<%= @album.title %>
<br>
<%= link_to "Edit Album", edit_album_path %><br><br>
<%= link_to "Upload a New Album", new_album_path %>

Вот файл route.rb:

Rails.application.routes.draw do

  get '/signup' => 'users#new', as: 'signup'
  post '/signup' => 'users#create'
  get '/signin' => 'sessions#new'
  post '/signin' => 'sessions#create'
  get '/signout' => 'sessions#destroy'

  resources :albums do
    resources :reviews
  end
  resources :users

  root to: "albums#index"
  # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
end

1 Ответ

1 голос
/ 11 апреля 2020

вам нужно изменить пару вещей здесь:

  1. на AlbumsController, вам нужно удалить index из действий, которые "предварительно загружают" альбом

    before_action :set_album, only: [:show, :edit, :update]

  2. Необходимо передать объект альбома на маршрут в представлении:

    <%= link_to "Edit Album", edit_album_path(@album) %><br><br>

надеюсь, что помогает

РЕДАКТИРОВАТЬ: о проблеме с аватаром, похоже, что вы отображаете альбомы в индексе, но не просматриваете их, что-то вроде:

<h2>All Albums</h2>
<% @albums.each do |album| %>
  <br>
  <br>
  <% if album.avatar&.attached? %>
    <image src="<%=(url_for(album.avatar))%>%" style="width:350px;   height:350px;">
  <% end %>
  <br>
  <%= album.artist %> - <%= album.title %>
  <%= link_to "Edit Album", edit_album_path(album) %><br><br>
  <br>
<% end %>
<%= link_to "Upload a New Album", new_album_path %>`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...