我有一个用户模型。
我正在尝试设置我的用户索引视图,以便仅显示已完成入职流程的用户。
我这样做的方法是:
指数:
t
在我的user.rb中,我尝试为onboarding定义一个范围,如下:
<% Users.onboarded.each do |user| %>
我的组织服务类中有一个方法:
scope :onboarded, -> { where (:user_is_matchable?) }
当我尝试这个时,我收到的错误是:
class UserOrganisationMapperService
attr_accessor :user
private
def user_is_matchable?
profile.present? && matching_organisation.present?
end
谁能看到我出错的地方?
答案 0 :(得分:1)
首先:Users
文件中的User
或user.rb
..该类的实际名称是什么?因为它应该是User
而不是Users
其次:scope :onboarded, -> { where (:user_is_matchable?) }
这不会起作用。范围是ActiveRecord查询 - 它只能处理数据库中实际结构的详细信息。如果您的用户表中没有名为user_is_matchable?
的列,那么此范围会抱怨并且不起作用。
你需要将该范围变成可以在数据库上运行的东西。
我只是猜测(你没有在这里给我们你们关系的完整结构),但你能做的事情如下:
scope :onboarded, -> { where ("profile_id IS NOT NULL AND matching_organisation_id IS NOT NULL") }
???
或者,您需要让它在ruby中运行 - 这将更慢(特别是如果您的表变得非常大,因为用户表通常不会这样做)。但如果你对它的速度很慢,那么你可以这样做:
class User < ActiveRecord::Base
def self.onboarded
all.select(&:user_is_matchable?)
end
或类似的......