Ruby on rails RubyonRails:过滤后计算每个类别的记录数
我在browse.html.erb上有一个搜索表单,它按标题和类别过滤文章。当我第一次进入浏览页面而不进行任何搜索时,我希望在侧边栏上显示所有类别的列表,以及属于该类别的文章数。提交搜索后,我希望根据搜索结果更新类别列表和文章数量 我无法理解发生此错误的原因: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方法,是一种用于从数据库检索数据的查询接口。在您的示例中,您
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是一个通配符匹配。如果她在寻找精确的匹配,她会选择标题(情商:我不确定,但我认为戴安娜是个女孩:)