私はユーザモデルを持っています。Rails:スコープクエリでサービスクラスメソッドを使用する
オンボーディングプロセスを完了したユーザーのみを表示するようにユーザーインデックスビューを設定しようとしています。
それを行うに私のアプローチは次のとおりです。
インデックス:
scope :onboarded, -> { where (:user_is_matchable?) }
I:私のuser.rbで
<% Users.onboarded.each do |user| %>
、私はとして、オンボーディングのために、範囲を定義しようとしました私の組織のサービスクラスに以下のようなメソッドを持っている:
class UserOrganisationMapperService
attr_accessor :user
private
def user_is_matchable?
profile.present? && matching_organisation.present?
end
私はこれをしようとすると、私が言うエラーを取得する:私が間違って行ってきたところ
undefined method `onboarded' for Users:Module
は誰でも見ることができますか?
まず:あなた 'user.rb'で' Users'または 'User'あなたはそれが超スローされた状態で[OK]をしている場合しかし、あなたはこれを行うことができますファイル..クラスの実際の名前は何ですか?なぜなら、 'User'ではなく' User'でなければならないからです。 –
あなたは 'user.rb'で' onboarded'を定義しましたが、あなたは 'Users'モジュールでそれを呼び出しています。あなたは 'User'でそれを呼び出すべきです。 –
第2に: 'scope:onboarded、 - > {where(:user_is_matchable?)}'これはうまくいきません。有効範囲はActiveRecordクエリです。データベース内の実際の構造の詳細しか処理できません。ユーザーのテーブルに 'user_is_matchable? 'という*カラム*がない場合、このスコープは不平を言って動作しません。 –