2016-01-06 81 views
0

我想將整個對象傳遞給我的show動作以更新其viewed字段,但由於某種原因,我一直收到此錯誤。訪問資源時出錯:「param丟失或值爲空:文章」

enter image description here

這是爲什麼?

index.html.erb

<td><%= link_to 'Show', article_path(article) %></td> 

控制器

def show 
    @article = Article.find(params[:id]) 
    @article.viewed += 1 
    @article.update(article_params) 
    end 

    private 
    def article_params 
     params.require(:article).permit! 
    end 

回答

3

在代碼你有以下行

params.require(:article).permit! 

require方法調用如果params散列不包含article散列,將會引發您遇到的錯誤。

你可以從錯誤頁面看到,當前的參數是

{"id"=>"1"} 

有沒有article哈希值。這是問題。

檢查你的代碼甚至進一步,以下行完全不

@article.update(article_params) 

你假裝要更新一些參數@articleshow行動纔有意義。然而在這裏,你至少有兩個問題:

  1. 的參數不以任何方式
  2. 這是一個show動作過去了,是不是應該更新資源

很可能給我你只是想增加計數器。如果是這樣的話,你的動作要

def show 
    @article = Article.find(params[:id]) 
    @article.viewed += 1 
    @article.save! 
end 

,甚至更好,你可以使用increment!

def show 
    @article = Article.find(params[:id]) 
    @article.increment! :viewed 
end 
+0

,是該記錄將被保存沒有活動記錄的保存和更新方法? –

+0

您可以在['increment!']的文檔中輕鬆找到確認信息(http://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-increment-21) –

相關問題