Rails seed.rb неопределенный метод для пользовательского метода - PullRequest
1 голос
/ 26 декабря 2011

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

Кроме того, это Rails 3.1.1 на Ruby 1.8.7

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

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

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

seed.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

1 Ответ

3 голосов
/ 26 декабря 2011

Чтобы вызвать какой-либо метод непосредственно в классе, например:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...