Rails 4 - 计算用户项目的方法
Rails 4 - method to count a user's projects
我正在尝试学习如何在我的 Rails 4 应用程序中编写一种计算用户项目的方法。
我有名为项目和配置文件的模型。这些协会是:
项目
belongs_to :profile
简介
has_many :projects
在我的项目模型中,我有一个按 profile_id 查找项目的范围。
scope :by_profile, ->(profile_id) { where(profile_id: profile_id) }
现在,我正在尝试编写方法来计算配置文件创建了多少个项目。
def project_counter
# projects created by this project creator
self.by_profile.count
# plus all the projects where the user is part of a project team
end
当我保存它并尝试在视图中使用它时:
<%= @project.project_counter %>
我收到一条错误消息:
undefined method `by_profile' for #<Project:0x007f98f1dff278>
Did you mean? profile
谁能看出我做错了什么?
当您调用 <%= @project.project_counter %>
时,@project 是方法内部引用 self
的上下文。请注意 self
是实例而不是 class Project
。
因此,在方法内部,当您调用 self.by_profile
时,您所做的就是在实例上调用 by_profile
。但是 by_profile
仅在 class 项目中可用,而不是实例。这就是为什么你得到一个 undefined method
by_profile' for #. Here
#` 指的是实例(由内存位置指向)。
另请注意,您没有将 profile_id
传递给 by_profile
,但 ruby 不会抱怨,因为它正在寻找实例方法 by_profile
并且不是 class 方法 by_profile
。(作用域实际上添加了 class 方法)
如果你想计算一个用户(个人资料)的项目,为什么不使用 @project.user.projects.count
?
希望对您有所帮助!
我正在尝试学习如何在我的 Rails 4 应用程序中编写一种计算用户项目的方法。
我有名为项目和配置文件的模型。这些协会是:
项目
belongs_to :profile
简介
has_many :projects
在我的项目模型中,我有一个按 profile_id 查找项目的范围。
scope :by_profile, ->(profile_id) { where(profile_id: profile_id) }
现在,我正在尝试编写方法来计算配置文件创建了多少个项目。
def project_counter
# projects created by this project creator
self.by_profile.count
# plus all the projects where the user is part of a project team
end
当我保存它并尝试在视图中使用它时:
<%= @project.project_counter %>
我收到一条错误消息:
undefined method `by_profile' for #<Project:0x007f98f1dff278>
Did you mean? profile
谁能看出我做错了什么?
当您调用 <%= @project.project_counter %>
时,@project 是方法内部引用 self
的上下文。请注意 self
是实例而不是 class Project
。
因此,在方法内部,当您调用 self.by_profile
时,您所做的就是在实例上调用 by_profile
。但是 by_profile
仅在 class 项目中可用,而不是实例。这就是为什么你得到一个 undefined method
by_profile' for #. Here
#` 指的是实例(由内存位置指向)。
另请注意,您没有将 profile_id
传递给 by_profile
,但 ruby 不会抱怨,因为它正在寻找实例方法 by_profile
并且不是 class 方法 by_profile
。(作用域实际上添加了 class 方法)
如果你想计算一个用户(个人资料)的项目,为什么不使用 @project.user.projects.count
?
希望对您有所帮助!