2011-12-26 3 views
1

Я прочитал несколько других сообщений по этому вопросу и до сих пор смущен. В моем seeds.rb я вызываю delete и создаю на модели без каких-либо проблем ... когда я добираюсь до настраиваемых методов, которые я создал, я получаю неопределенную ошибку метода. create и delete_all работают нормально, когда я комментирую строки name_gen и ssn_gen.Rails seeds.rb undefined метод для пользовательского метода

Кроме того, это Rails 3.1.1 на Руби 1.8.7

Update: должны также упоминали я получаю один и тот же вопрос, если я изменю создать на новые и перемещать разделы name_gen к чему-то вроде @sample_data_set.officialFirstName = SampleDataSet.name_gen

Ошибка: не определен метод `name_gen» для #

Команда для граблей: bundle exec rake db:seed RAILS_ENV=development --trace

seeds.rb

SampleDataSet.delete_all 

@sample_data_set = SampleDataSet.new (
     :campusNum    => "96", 
     :dateOfBirth    => "1981-10-09", 
     :gender     => "M", 
     :officialMiddleInitial => "L", 
     :addressLine1   => "PO BOX 9", 
     :addressLine2   => "", 
     :city     => "WOODLAND", 
     :state     => "GA", 
     :zipCode     => "31836", 
     :homeAreaCode   => "706", 
     :homePhoneNumber   => "6742435", 
     :homePhoneCountryCode => "US", 
     :workAreaCode   => "706", 
     :workPhoneNumber   => "6742435", 
     :workPhoneCountryCode => "US", 
     :usCitizen    => true, 
     :financialAid   => true, 
     :previousDegree   => "ADN", 
     :region     => "MAIN", 
     :program     => "AAPSY", 
     :version     => "012", 
     :team     => "TEAM 3236A", 
     :enrollmentUserId  => "SSGROTH", 
     :revCampusOid   => "1627", 
     :executingUserId   => "QROBINSO", 
     :totalDeclaredExtCredits => "1", 

     #generating some default values for the gen fields... except IRN 
     :officialFirstName => SampleDataSet.name_gen, 
     :officialLastName => SampleDataSet.name_gen,   
     :enrollAgreeSignDate => Date.today.strftime('%Y-%m-%d'), 
     :scheduledStartDate => Date.tomorrow.strftime('%Y-%m-%d'), 
     :ssn => SampleDataSet.ssn_gen.to_s 
    ) 

@sample_data_set.emailAddresses = officialFirstName + "." + officialLastName + "@aaaa.phoenix.edu" 

,

SampleDataSet модель

class SampleDataSet < ActiveRecord::Base 

    #Random info generation 
    def name_gen(*prepend) 
    #Random character generation piece I found on Stackoverflow with 102 upvotes 
    character_map = [('a'..'z'),('A'..'Z')].map{|i| i.to_a}.flatten 
    name = (0..8).map{ character_map[rand(character_map.length)] }.join 

    if prepend.nil? 
     return name 
    else 
     return prepend.to_s + "_" + name 
    end 
    end 

    def ssn_gen 
    #broke this out as its own method in case someone wants some logic later on 
    ssn = Random.rand(1000000000) + 99999999 
    return ssn 
    end 

end 

ответ

3

Для того, чтобы вызывать некоторые метод непосредственно на класс, как, что:

SampleDataSet.name_gen 

вместо вызова его на экземпляр этого класса (как регулярные методы):

a = SampleDataSet.new 
a.name_gen 

вы должны определить этот метод как метод класса.

Вы можете сделать это с помощью self.name_gen вместо name_gen в определении метода, как, что:

class SampleDataSet < ActiveRecord::Base 

    # Random info generation 
    def self.name_gen(*prepend) 
    # Random character generation piece I found on Stackoverflow with 102 upvotes 
    character_map = [('a'..'z'), ('A'..'Z')].map { |i| i.to_a }.flatten 
    name = (0..8).map { character_map[rand(character_map.length)] }.join 

    if prepend.nil? 
     return name 
    else 
     return prepend + "_" + name 
    end 
    end 

    def self.ssn_gen 
    # broke this out as its own method in case someone wants some logic later on 
    ssn = Random.rand(1000000000) + 99999999 
    return ssn 
    end 

end 
+0

D'Oh! Спасибо, что сделал трюк – ScottJShea

+0

@ KL-7 Спасибо, это было отличное редактирование :) – PriteshJ

Смежные вопросы