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

时间:2015-04-23 02:27:38

标签: ruby-on-rails ruby

我的rails应用程序中有2个表,其中一个是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

我是铁杆新手,所以如果我搞砸了什么,我很抱歉

3 个答案:

答案 0 :(得分:1)

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

has_many :products, foreign_key: 'created_by_id'

然后你可以使用:

current_user.products.count

PS:最好调用该列user_id而不是created_by_id,因为Rails可以猜测关联列是否采用<model_lower_case>_id格式。

答案 1 :(得分:0)

删除&#39; current_user.id&#39;周围的引号。另外,您是否定义了用户和产品型号之间的关系?

答案 2 :(得分:0)

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

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已经提供了很多这样的小功能。