12

大量の詳細なコードを記述する必要がないように、 seeds.rbにメソッドを追加しようとしています。ただし、create_deliverableメソッドの配置に応じて、を実行すると2つのエラーメッセージのいずれかが表示されますdb:setup

メソッドが呼び出し前の場合

レーキが中止されました!プライベートメソッド'create_deliverable'が#に対して呼び出されました

メソッドが呼び出し後の場合

レーキが中止されました!#の未定義のメソッド `create_deliverable'

seeds.rbでメソッドを使用することはできませんか?どういうわけか、メソッドを誤って呼び出していますか(を使用して、または使用せずに呼び出してみましたself.)?

方法

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

市外局番

@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
4

3 に答える 3

18

メソッドを呼び出す前に、必ずメソッドを定義してください。

def test_method
  puts "Hello!"
end

test_method
于 2015-07-23T01:32:54.650 に答える
15

を使用する場合self.は、呼び出しではなくメソッド定義で使用してください。

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

.rbクラス定義のないファイルは、実行時に匿名の Ruby クラスにラップされることを理解しているため、self でメソッドを定義すると問題なく動作するはずです。

于 2009-11-17T18:17:07.273 に答える
7

スクリプトのアクセス修飾子のcreate_deliverable後にメソッドを配置したように見えます。privateの後に入れpublicます。

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
于 2009-11-17T18:19:14.510 に答える