2015-11-08 5 views
1

Я новичок в Rails и пытаюсь создать собственное приложение для проекта. Я продолжаю получать эту ошибку при попытке создать удаление и редактирование.Удалить/уничтожить и изменить маршрутизацию

NameError в листинги # показать

Вот мой файл routes.rb ...

Rails.application.routes.draw do 
resources :listings 

    root 'listings#home' 

    get '/listings/new' => 'listings#new' 

    post '/listings' => 'listings#create' 

    get '/listings/:id' => 'listings#show' 

    get '/listings/:id/edit' => 'listings#edit' 

    patch '/listings/:id' => 'listings#update' 

    delete '/listings/:id' => 'listings#destroy' 

end 


# Prefix Verb URI Pattern     Controller#Action 
#  listings GET /listings(.:format)   listings#index 
#    POST /listings(.:format)   listings#create 
# new_listing GET /listings/new(.:format)  listings#new 
# edit_listing GET /listings/:id/edit(.:format) listings#edit 
#  listing GET /listings/:id(.:format)  listings#show 
#    PATCH /listings/:id(.:format)  listings#update 
#    PUT /listings/:id(.:format)  listings#update 
#    DELETE /listings/:id(.:format)  listings#destroy 

Вот мой Тэг контроллер ...

class ListingsController < ApplicationController 
    before_action :set_listing, only: [:edit, :update, :destroy] 

    def index 
     @listings = Listing.all 
    end 

    def show 
     @listings = Listing.find(params[:id]) 
    end 

    def new 
     @listings = Listing.new 
    end 

    def create 
     @listings = Listing.new(listing_params) 
      @listings.save 
      redirect_to listings_path 
     end 
    end 

    def edit 
    end 

    def update 
     if @listings.update(listing_params) 
      redirect_to listings_path 
     else 
      render :edit 
     end 

    def destroy 
     @listings = Listing.find(params[:id]) 
      redirect_to listings_url 
    end 

    def set_listing 
     @listings = Listing.find(params[:id]) 
    end 

    def listing_params 
     params.require(:listing).permit(:address, :unit, :price, :description, :img_url) 
    end 

end 

Здесь это мой файл show.html.erb ...

<center><h2>Current Listing</h2></center> 

<h4>Address:</h4> <h3><%= @listings.address %></h3> 
<h4>Unit #:</h4> <h3><%= @listings.unit %></h3> 
<h4>Price: $</h4> <h3><%= @listings.price %></h3> 
<h4>Description:</h4> <h3><%= @listings.description %></h3> 
<h4>Agent ID:</h4> <h3><%= @listings.agent_id %></h3> 
<h4>Image:</h4> <h3><%= @listings.img_url %><p></h3> 

<%= link_to 'Back', listings_path %> 
<%= link_to 'Delete', listing, :method => 'delete' %> 

ответ

1

Ошибка, скорее всего, здесь:

<%= link_to 'Delete', listing, :method => 'delete' %> 

listing не определен, вы должны использовать @listings, которые вы определили в контроллере.

Пара других вещей:

  1. @listings чрезвычайно вводит в заблуждение название здесь. Если это особый объект, используйте особую форму @listing. Это облегчит вашу жизнь, когда вы вернетесь к этому коду в следующем году. Естественно, вы должны использовать @listings при работе с коллекциями (действие индекса).

  2. У вас уже есть способ делать то, что вы делаете в шоу-действии - set_listings. Просто добавьте show в список рядом с before_action, чтобы сушить ваш код.

  3. resources :listings уже созданы маршруты для всех операций с данными, их нет необходимости определять вручную.

  4. Всегда, всегда, всегда просматривайте (и публикуйте в своих вопросах) полное сообщение об ошибке. Это даст вам гораздо больше информации о том, что произошло. Есть тысячи причин, почему может быть поднят NameError. nameError: undefined method listing for <ActionViev...> сужает его до нескольких, и ваша обратная связь будет сужать его дальше до точки.

0

Изменить Удалить ссылку

<%= link_to 'Delete', listing_path(@listings), 
      :confirm => 'Are you sure?', :method => :delete %> 

Снимите следующие маршруты из routes.rb как resources :listings в маршрутах файл будет предоставлять эти маршруты автоматически

get '/listings/new' => 'listings#new' 

post '/listings' => 'listings#create' 

get '/listings/:id' => 'listings#show' 

get '/listings/:id/edit' => 'listings#edit' 

patch '/listings/:id' => 'listings#update' 

delete '/listings/:id' => 'listings#destroy' 
Смежные вопросы