我正面临一个奇怪的错误。谁能解释一下这是什么原因。。
我有一个名为站点、设置和体验的模型。
设置和体验有数据库列“位”
在我的站点模型中,我有这个代码
def populate_experiences_bit_set
self.experiences.map(&:bit).inject(0, :|)
end
def populate_settings_bit_set
self.settings.map(&:bit).inject(0, :|)
end
在我名为 2_28.rake 的 rake 文件中,有一个名为bit的方法
def bit(klass)
current_class = klass.find(:all)
if current_class.count == 0
return 1
else
return (current_class.last.bit * 2)
end
end
此方法用于同一 rake 文件中的 rake 任务“get_value”之一。
在同一个文件中还有另一个名为 create_sites_report_data 的 rake 任务,其中有一行:
site.populate_experiences_bit_set
现在当我运行 rake 任务时
rake releases:2.28:create_sites_report_data
我收到一条错误消息
" 尝试调用私有方法 /Users/rakeshshetty/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-2.3.5/lib/active_record/attribute_methods.rb:236:in `method_missing' "
In console, this works fine
>> s = Site/364
=> #<Site id: 364, name: "1 Field Ambulance - Detachment Wainwright", type: "Site", created_at: "2009-12-29 16:53:58", updated_at: "2009-12-29 16:53:58", short_name: "1 Field Am", self_updated_at: nil, last_updater_id: nil, vfp_id: "2BL0NFMI1", dup_reference_id: nil, field_id: nil, marked_as_deleted: false>
>> s.experiences.map(&:bit).inject(0, :|)
=> 0
>> s.settings.map(&:bit).inject(0, :|)
=> 64
我将 2_28.rake 文件中的方法名称从 bit 替换为 bit_x Rake 工作正常
blsi1181a:cpi_2.24 rakeshshetty$ rails -v
Rails 2.3.5
blsi1181a:cpi_2.24 rakeshshetty$ ruby -v
ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.3.0]
我的问题是位是设置和体验中的一个字段。它如何调用 rake 方法函数 bit() ?这个 rake 文件是在应用程序加载后加载的吗?