我正在尝试向 seeds.rb 添加一个方法,这样我就不必编写一堆详细的代码了。但是,根据create_deliverable
方法的位置,我在运行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
答案 0 :(得分:15)
如果您打算使用self.
,请在方法定义上使用它,而不是使用它。
def self.create_deliverable(...)
...
end
...
create_deliverable("Low", type.id, phase.id)
...
我的理解是,没有类定义的.rb
文件在运行时会被包装在匿名ruby类中,因此在self上定义方法应该可以正常工作。
答案 1 :(得分:11)
确保在调用方法之前定义方法:
def test_method
puts "Hello!"
end
test_method
答案 2 :(得分: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