Ruby on rails 比较两个表中两列的值并计算rails中的总匹配数

Ruby on rails 比较两个表中两列的值并计算rails中的总匹配数,ruby-on-rails,ruby,Ruby On Rails,Ruby,我的rails应用程序中有两个表,一个是Products,另一个是Users 在products表中,我有一个created_by_id,它是一个整数,与创建它的用户的id相匹配。我需要显示一个运行的产品总数,我有一个问题这样做 class ApplicationController < ActionController::Base protect_from_forgery with: :exception def ensure_logged_in unless cur

我的rails应用程序中有两个表,一个是
Products
,另一个是
Users

在products表中,我有一个
created_by_id
,它是一个整数,与创建它的用户的id相匹配。我需要显示一个运行的产品总数,我有一个问题这样做

class ApplicationController < ActionController::Base

  protect_from_forgery with: :exception

  def ensure_logged_in
    unless current_user
      flash[:alert] = "Please log in"
      redirect_to root_path
    end
  end

  def totalprods
   Product.all.joins(:users).where("created_by_id LIKE current_user.id").count
  end

  helper_method :current_user

  private

  def current_user
    @current_user ||= User.find(session[:user_id]) if session[:user_id]
  end

end
class ApplicationController

我是rails新手,所以如果我把事情搞砸了,我很抱歉删除“current_user.id”周围的引号。另外,您是否定义了用户和产品模型之间的关系?

根据您的问题,您可以采用以下两种方法之一 漫长的道路:

def totalProds
   count = 0
   @products = Product.all
   @products.each do |product|
      count = count + 1
   end
   return count
end
如果您的模型设置正确,您应该能够使用简短的方法

def totalProds
   @products = Product.all
   count = @products.count
   return count
end

第二种方法将是首选方法,除非您必须与添加到计数器的计数一起执行某些操作。Ruby已经提供了很多类似的小功能。

在您的
app/models/user.rb文件中,添加:

has_many :products, foreign_key: 'created_by_id'
然后您可以使用:

current_user.products.count

PS:最好将该列称为
user\u id
而不是
created\u by\u id
,因为Rails可以猜测关联列的格式,如果该列的格式为
\u id

,并正确设置关联,则您应该能够执行
当前用户.products.count
(或
当前用户。已创建产品。计数
或任何关联名称)。非常感谢!我将重新创建值以使用正确的术语。如果这解决了您的问题,您能将其标记为正确答案吗?