我的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
我是铁杆新手,所以如果我搞砸了什么,我很抱歉
答案 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已经提供了很多这样的小功能。