【发布时间】:2016-06-22 04:38:01
【问题描述】:
我有一个用户模型。
我正在尝试将我的用户索引视图设置为仅显示那些已完成入职流程的用户。
我的做法是:
索引:
<% Users.onboarded.each do |user| %>
在我的 user.rb 中,我尝试为入职定义一个范围,如下所示:
scope :onboarded, -> { where (:user_is_matchable?) }
我的组织服务类中有一个方法:
class UserOrganisationMapperService
attr_accessor :user
private
def user_is_matchable?
profile.present? && matching_organisation.present?
end
当我尝试这个时,我收到一条错误消息:
undefined method `onboarded' for Users:Module
谁能看出我哪里出错了?
【问题讨论】:
-
首先:
Users或User在您的user.rb文件中.. 类的实际名称是什么?因为它应该是User而不是Users -
您在
user.rb中定义了onboarded,但您在Users模块上调用它。你应该打电话给User。 -
其次:
scope :onboarded, -> { where (:user_is_matchable?) }这行不通。范围是一个 ActiveRecord 查询——它只能处理数据库中实际结构的细节。如果您的用户表中没有名为user_is_matchable?的列,则此范围将抱怨并且不起作用。
标签: ruby-on-rails methods scope