【问题标题】:Delete/Destroy and Edit routing删除/销毁和编辑路由
【发布时间】:2015-11-08 01:29:21
【问题描述】:

我是 Rails 的新手,正在尝试为一个项目构建自己的应用程序。我在尝试创建删除和编辑时不断收到此错误。

Listings中的NameError#show

这是我的 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' %>

【问题讨论】:

    标签: ruby-on-rails ruby routing restful-url


    【解决方案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 &lt;ActionViev...&gt; 将其缩小到只有几个,而您的回溯会将其缩小到一个点。

    【讨论】:

      【解决方案2】:

      将删除链接更改为

      <%= 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'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-10
        • 1970-01-01
        • 2012-03-17
        • 2022-01-25
        • 1970-01-01
        • 2016-06-23
        • 2015-07-05
        • 1970-01-01
        相关资源
        最近更新 更多