2013-12-20 60 views
1

我有一張表,用戶可以添加數據,我還包括一個按鈕,供用戶刪除一行數據:未定義的方法`銷燬'的零:NilClass找不到我的數據的ID

<tbody> 
<% @jobs.each do |job| %> 
    <tr> 
    <td><%= link_to job.job_title, job.url, :target => "_blank" %></td> 
    <td><%= job.company %></td> 
    <td><%= job.location %></td> 
    <td><%= link_to "", list_url(job), method: :delete, class: "fa fa-trash-o" %></td> 
    </tr> 
<% end %> 
</tbody> 

但是,當按下刪除按鈕時,我得到一個「未定義的方法`銷燬'爲零:NilClass」錯誤。在我的服務器日誌中,它表示ID爲空,我似乎無法獲取該特定行數據的ID。

我已經看過其他類似的Stackoverflow問題,我問的人,但找到的解決方案並沒有爲我工作。

僅供參考下面是我的路線,涉及到添加,顯示和刪除數據:

get '/jobs' => 'search#list', as: 'list' 
post '/jobs' => 'search#create' 
delete '/jobs' => 'search#destroy' 

而且我的控制器:

def new 
    @job = Job.new 
end 

def create 
    @job = Job.new(job_params) 

    if @job.save 
    redirect_to list_url, notice: "You've successfully added the job to the list" 
    else 
    render 'search', notice: "Something went wrong, please try again" 
    end 
end 

def list 
    @jobs = Job.all 
    @job = Job.find_by_id(params[:id]) 
end 

def destroy 
    @job = Job.find_by_id(params[:id]) 
    @job.destroy 
    redirect_to list_url, notice: "Job destroyed" 
end 

def job_params 
    params.require(:job).permit(:job_title, :company, :location, :url) 
end 
+0

請發佈錯誤消息和它發生的位置。 –

+0

它出現在我的控制器的'@ job.destroy'中 錯誤提示「SearchController#中的NoMethodError destroy,未定義的方法destroy'for nil:NilClass」 – Reuben

+0

你知道使用'find_by_id'和'find'時的區別嗎? 'find_by_id'甚至沒有找到並且沒有發現錯誤。 '發現'崩潰。所以你必須確保在使用'find_by_id'時發現了一條記錄 – devanand

回答

0

在你刪除的鏈接,你要鏈接到該對象本身,而不是對象的URL。因此,改變

<td><%= link_to "", list_url(job), method: :delete, class: "fa fa-trash-o" %></td> 

<td><%= link_to "", job, method: :delete, class: "fa fa-trash-o" %></td> 

最重要的是,你需要適當的CRUD路線定義,所以我會建議你routes.rb文件中的以下內容:

resources :jobs, controller: 'search' 
+0

當我進行修改時,我得到#<#:0x007f866c189350>的「未定義方法job_path」 – Reuben

+0

您需要一個'在'routes.rb'中刪除'/ job'路徑(單數) – Donovan

+0

'delete'/>''搜索#destroy''爲: 'delete'/ job'=>'search #destroy''並得到了我原來的錯誤。 我也嘗試改變路由到'刪除'/ job /:id'=>'search#destroy'',但我得到一個路由錯誤,提示「沒有路由匹配[DELETE]」/jobs.4「」 – Reuben

0

如果您正在嘗試指定特定的作業實例,請不要認爲您想鏈接到list_url。也許類似

<td><%= link_to "", job_path(job), method: :delete, class: "fa fa-trash-o" %></td> 
+0

當我做出改變時,我得到了同樣的錯誤,我發佈@Donovan的回答 – Reuben

+0

我認爲這是你的路線問題。它看起來像你有一個列表路線,但不是一個演出路線。 –

相關問題