【发布时间】:2011-09-06 12:48:46
【问题描述】:
我将尝试从 ActiveRecord 模型中找出一些奇怪的行为。该模型有一个language 字段,其中填充了语言标识符(“de”、“en”)
如果我想从模型对象访问语言属性,我会得到nil。
$> foo = Product.first
=> #<Product id: 1049488, ... , language: "en", ...>
$> foo.id
=> 1049488
$> foo.language
=> nil
$> foo.send("language")
=> nil
$> foo.to_yaml
=> "--- !ruby/object:Product \nattributes: \n ... language: en\n ..."
$> foo.language
=> "en"
这似乎是一个隐藏的延迟加载“功能”或其他东西试图在这里干预。是导致这种行为的字段名称“语言”还是我不理解的其他机制?
我在我的 Rails 项目中使用以下 Gems:
- 导轨 3.0.0
- jquery-rails
- sqlite3-ruby
- mysql
- rmagick
- acts_as_tree
- dbi
- dbd-odbc
- solr-ruby
- 进度条
我还检查了各种“reserved words”列表是否存在冲突,但没有列表包含language。当列名更改为lang 时,一切正常。所以,它是一个命名问题,但我无法找到它。是否有任何工具可以从 Ruby 中的给定方法获取调用堆栈或其他东西来定位问题?
【问题讨论】:
标签: ruby-on-rails activerecord lazy-loading