Ruby on rails 比较两个表中两列的值并计算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
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
(或当前用户。已创建产品。计数
或任何关联名称)。非常感谢!我将重新创建值以使用正确的术语。如果这解决了您的问题,您能将其标记为正确答案吗?