2016-01-06 77 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) –

相关问题