Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails:过滤后计算每个类别的记录数_Ruby On Rails_Ruby_Ruby On Rails 5 - Fatal编程技术网

Ruby on rails RubyonRails:过滤后计算每个类别的记录数

Ruby on rails RubyonRails:过滤后计算每个类别的记录数,ruby-on-rails,ruby,ruby-on-rails-5,Ruby On Rails,Ruby,Ruby On Rails 5,我在browse.html.erb上有一个搜索表单,它按标题和类别过滤文章。当我第一次进入浏览页面而不进行任何搜索时,我希望在侧边栏上显示所有类别的列表,以及属于该类别的文章数。提交搜索后,我希望根据搜索结果更新类别列表和文章数量 我无法理解发生此错误的原因: undefined method `where' for #<Article:0x007f1e60f193e0> 在Rails中,其中是一种ActiveRecord方法,是一种用于从数据库检索数据的查询接口。在您的示例中,您

我在browse.html.erb上有一个搜索表单,它按标题和类别过滤文章。当我第一次进入浏览页面而不进行任何搜索时,我希望在侧边栏上显示所有类别的列表,以及属于该类别的文章数。提交搜索后,我希望根据搜索结果更新类别列表和文章数量

我无法理解发生此错误的原因:

undefined method `where' for #<Article:0x007f1e60f193e0>

在Rails
中,其中
是一种
ActiveRecord
方法,是一种用于从数据库检索数据的查询接口。在您的示例中,您必须这样做:

<%= category.articles.where(title: params[:q][:title_cont]).count %>

戴安娜

您正在使用select on articles数组,并将
article
变量传递给一个块<代码>文章变量只包含一篇普通文章。此对象没有
.where
方法

重写:

category.articles.select{|article| article.where(title == params[:q][:title_cont])}.count
致:

但是这段代码仍然是可以重构和改进的。你能分享一下全景吗

已编辑

category.articles.where(title: params[:q][:title_cont]).count
这是一个糟糕的解决方案,因为它将检查标题完全相等的文章,而您正在查找标题包含
参数[:q][:title\u cont]
为什么?

<p><%= category.articles.select{|article| article.where(title == params[:q][:title_cont])}.count %></p>
<p><%= category.articles.select{|article| article.class.where(title == params[:q][:title_cont])}.count %></p>
您正在尝试对项目对象而不是项目关系执行where条件

替换或替换

<p><%= category.articles.select{|article| article.where(title == params[:q][:title_cont])}.count %></p>
<p><%= category.articles.select{|article| article.class.where(title == params[:q][:title_cont])}.count %></p>

<p><%= category.articles.select{|article| article.where(title == params[:q][:title_cont])}.count %></p>
<p><%= category.articles.select{|article| article.class.where(title == params[:q][:title_cont])}.count %></p>

或 正确的方法

<p><%= category.articles.where(title: params[:q][:title_cont]).count %></p>


您确定@diana正在寻找匹配的子字符串吗?如果是这样的话,他将不得不使用通配符。我不能确定,但ransack title_cont是一个通配符匹配。如果她在寻找精确的匹配,她会选择标题(情商:我不确定,但我认为戴安娜是个女孩:)