Méthode privée sélectionnez appelé pour la classe de Rails

J'ai le code suivant à l'intérieur de mon contrôleur:

array = Contact.select(:name).distinct

L'idée est que cela permettrait de créer un tableau de tous les Contact modèles avec un unique :name attribut. Cependant, c'est jeter cette erreur:

NoMethodError (private method 'select' called for Contact:Class)

Quel est le malentendu ici? Pour ce que ça vaut, la méthode de l'appel à cette ligne de code n'est pas définie dans le contrôleur comme privé.

EDIT:

Voici le code:

Contrôleur de

class FluidsurveysController < ApplicationController

  def index
  end

  def import_contacts
    @survey_provider = FluidsurveysProviders::SurveyProvider.new()

    @current_month = Time.new.strftime("%B%Y%d")

    fs_contact_list_array = csv_to_array(params[:file].tempfile)
    @fs_contacts_array = []

    fs_contact_list_array.each do |hash|
      @fs_contacts_array << Contact.new(hash)
    end

   array = Contact.select(:name).distinct
   end
end

Modèle

class Contact
  include ActiveModel::Model
  attr_reader :client_id, :client_name, :branch_id, :branch, :short_name, :unit_id, :membership_id,
              :first_name, :last_name, :date_of_birth, :change_date_time, :membership_type,
              :home_phone, :email_address, :anniversary_years


  def initialize(fs_contact_hash = {})
    @client_id = fs_contact_hash.fetch('ClientID')
    @client_name = fs_contact_hash.fetch('ClientName')
    @branch_id = fs_contact_hash.fetch('branchID1')
    @branch = fs_contact_hash.fetch('branch')
    @name = fs_contact_hash.fetch('ShortName')
    @unit_id = fs_contact_hash.fetch('UnitID')
    @membership_id = fs_contact_hash.fetch('MemberID')
    @first_name = fs_contact_hash.fetch('FirstName')
    @last_name = fs_contact_hash.fetch('LastName')
    @date_of_birth = fs_contact_hash.fetch('DateOfBirth')
    @change_date_time = fs_contact_hash.fetch('ChangeDateTime')
    @membership_type = fs_contact_hash.fetch('MembershipType')
    @home_phone = fs_contact_hash.fetch('HomePhone')
    @email_address = fs_contact_hash.fetch('EMail1')
    @anniversary_years = fs_contact_hash.fetch('Years')
  end
end
  • FWIW: les Rails de référence de l'API de membres de cette utilisation précises comme par exemple: api.rubyonrails.org/classes/ActiveRecord/...
  • Vous avez écrit "n'est pas défini dans le controller en privé", tu veux dire modèle à la place?
  • Non, je veux dire la méthode elle-même n'est pas une méthode privée. Cependant, aucun de mes attributs de modèle sont privés soit.
  • Peut-être essayer Contact.all.select(:name)
  • Est votre Classe un ActiveRecord Objet?
  • J'ai édité la question d'inclure plus d'informations.
  • Votre classe n'est pas un ActiveRecord classe, voir ma réponse.

InformationsquelleAutor Luigi | 2013-11-13