12
votes

En utilisant une méthode dans les graines.rb dans Ruby sur rails

J'essaie d'ajouter une méthode à mon graines.rb em> afin que je n'ai pas besoin d'écrire un groupe de code verbeux. Toutefois, en fonction de la mise en place de la méthode Create_Deliverable Code>, je reçois l'un des deux messages d'erreur lors de l'exécution dB: Configuration code>.

Lorsque la méthode est avant appeler p>

RAKE ANTORTED! Méthode privée 'Create_Deliverable' appelée # p> blockQuote>

Lorsque la méthode est après appel p>

RAKE ANTORTED! méthode non définie `create_deliverable 'pour # p> blockQuote>

n'est-il pas possible d'utiliser des méthodes dans graines.rb em>? Suis-je en quelque sorte appeler la méthode de manière incorrecte (j'ai essayé d'appeler avec et sans le moi code>)? P>

Méthode strong> P>

@wf_project.project_phases.each do |phase|
  DeliverableType.find_by_lifecycle_phase(phase.lifecycle_phase_id).each do
    |type|
    self.create_deliverable("Low", type.id, phase.id)

    self.create_deliverable("Medium", type.id, phase.id)

    self.create_deliverable("High", type.id, phase.id)
  end
end


0 commentaires

3 Réponses :


15
votes

Si vous allez utiliser auto. code>, utilisez-le sur la définition de la méthode, pas l'appel.

def self.create_deliverable(...)
    ...
end
...
create_deliverable("Low", type.id, phase.id)
...


1 commentaires

+1 pour l'explication sur la manière dont .rb sans définition de classe est enveloppé dans une classe de rubis anonyme



7
votes

me semble que vous avez placé votre Create_Deliverable Code> Méthode après Indépendante code> Accédez à votre script. Mettez-le après Public CODE>.

public

    def create_deliverable(complexity, project_phase_id, deliverable_type_id)
      Deliverable.create(:name => (0...8).map{65.+(rand(25)).chr}.join,
          :size => 2 + rand(6) + rand(6),
          :rate => 2 + rand(6) + rand(6),
          :deliverable_type_id => deliverable_type_id,
          :project_phase_id => project_phase_id,
          :complexity => complexity)
    end
private # to keep the rest of methods private


1 commentaires

Les graines .rb ne définissent aucune classe, si public et privé n'a pas d'importance. Ce qui compte, c'est que vous définissez la méthode avant de l'exécuter.



17
votes

Assurez-vous de définir la méthode avant de l'appeler:

def test_method
  puts "Hello!"
end

test_method


1 commentaires

C'est une meilleure réponse, car les graines.rb ne définissent pas une classe, les méthodes publiques / privées n'ont pas d'importance.