Ich habe ein Benutzermodell.Rails: Mit Service-Klasse Methoden in einem Umfang Abfrage
Ich versuche, meinen Benutzerindex Ansicht festlegen nur die Benutzer zu zeigen, wer einen Onboarding-Prozess abgeschlossen hat.
Mein Ansatz, das zu tun ist:
Index:
<% Users.onboarded.each do |user| %>
In meinem user.rb habe ich versucht, einen Bereich, für Onboarding zu definieren, wie:
scope :onboarded, -> { where (:user_is_matchable?) }
I habe eine Methode in meiner Organisation Service-Klasse, die hat:
class UserOrganisationMapperService
attr_accessor :user
private
def user_is_matchable?
profile.present? && matching_organisation.present?
end
Wenn ich dies versuchen, ich erhalte eine Fehlermeldung, die sagt:
undefined method `onboarded' for Users:Module
Kann jemand sehen, wo ich falsch gegangen?
Erstens: 'Benutzer' oder 'User' in Ihrem' user.rb' Datei .. Wie lautet der tatsächliche Name der Klasse? weil es 'User' nicht' User' sein sollte –
Sie haben 'onboarded' in' user.rb' definiert, aber Sie rufen es auf 'Users' Modul auf. Sie sollten es stattdessen auf "Benutzer" aufrufen. –
Zweitens: 'scope: onboarded, -> {where (: user_is_matchable?)}' Das wird einfach nicht funktionieren. Ein Bereich ist eine ActiveRecord-Abfrage - er kann nur Details der tatsächlichen Struktur in der Datenbank behandeln. Wenn Sie in Ihrer Benutzertabelle keine * Spalte * mit dem Namen 'user_is_matchable?' haben, wird sich dieser Bereich beschweren und nicht funktionieren. –