【发布时间】:2024-04-21 15:00:01
【问题描述】:
我的控制器中有以下代码:
array = Contact.select(:name).distinct
这个想法是,这将创建一个具有唯一 :name 属性的所有 Contact 模型的数组。但是,它抛出了这个错误:
NoMethodError (private method 'select' called for Contact:Class)
这里有什么误解?不管怎样,调用这行代码的方法并没有在控制器中定义为私有的。
编辑:
这是实际代码:
控制器
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
型号
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:Rails API 参考以这个确切的用法为例:api.rubyonrails.org/classes/ActiveRecord/…
-
你写的“没有在 controller 中定义为私有”,你的意思是 model 吗?
-
不,我的意思是方法本身不是私有方法。但是,我的模型属性也不是私有的。
-
也许可以试试
Contact.all.select(:name) -
你的类是 ActiveRecord 对象吗?
标签: ruby-on-rails ruby methods controller