ahs*_*ele 12 ruby-on-rails seed
我正在尝试向seed.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
Run Code Online (Sandbox Code Playgroud)
致电代码
@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
Run Code Online (Sandbox Code Playgroud)
loc*_*red 15
如果您要使用self.
,请在方法定义中使用它,而不是在调用中使用它.
def self.create_deliverable(...)
...
end
...
create_deliverable("Low", type.id, phase.id)
...
Run Code Online (Sandbox Code Playgroud)
我的理解是,.rb
没有类定义的文件在运行时会被包装在一个匿名的ruby类中,因此在self上定义方法应该可以正常工作.
Joe*_*ski 11
确保在调用之前定义方法:
def test_method
puts "Hello!"
end
test_method
Run Code Online (Sandbox Code Playgroud)
在我看来,就像你在脚本中的访问修饰符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
Run Code Online (Sandbox Code Playgroud)