2014-01-11 34 views
0

,我發現了錯誤:「的ActionController :: ParameterMissing在SitesController#消滅」Rails的帕拉姆沒有發現破壞鏈接

它說:「參數未找到:網站」

顯示視圖:

<%= link_to 'Destroy', @site, method: :delete, data: { confirm: 'Are you sure?' } %> 

控制器銷燬行動

def destroy 
    @site = Site.find(site_params) 
    if @site.present? 
     @site.destroy 
    end 
    redirect_to "sites#index" 
    end 

    private 
    def site_params 
     params.require(:site).permit(:user_id, :domain) 
    end 

路線

  sites GET /sites(.:format)    sites#index 
       POST /sites(.:format)    sites#create 
     new_site GET /sites/new(.:format)   sites#new 
     edit_site GET /sites/:id/edit(.:format)  sites#edit 
      site GET /sites/:id(.:format)   sites#show 
       PATCH /sites/:id(.:format)   sites#update 
       PUT /sites/:id(.:format)   sites#update 
       DELETE /sites/:id(.:format)   sites#destroy 

爲什麼這不起作用?

+0

我不想成爲那個人,但是你耙第一? – Alexander

回答

0

你可以從rake任務見,破壞路線被定義爲

DELETE /sites/:id(.:format)   sites#destroy 

而且由於連桿預計不會發布任何數據時,您可以訪問的唯一參數值的方式是該網站的ID

params[:id] 

你需要改變你的方法

@site = Site.find(params[:id]) 

代替

@site = Site.find(site_params) 

此外,還有一些額外的變化就可以申請

if @site.present? 
    @site.destroy 
end 

此檢查是沒有意義的。如果查找返回結果,則表示該記錄存在。

redirect_to "sites#index" 

這是一個可怕重定向命令(假設它的工作原理)。改用指定的路線。

把所有的變化一起最終結果

def destroy 
    @site = Site.find(params[:id]) 
    @site.destroy 
    redirect_to sites_url 
end 
0

在這種情況下,您沒有正確使用強參數。在這種情況下通過的參數只是一個id。其結果是,你的代碼應該簡單地:

def destroy 
    @site = Site.find(params[:id]) 

    if @site.present? 
    @site.destroy 
    end 

    redirect_to "sites#index" 
end