【问题标题】:"language" attribute on Rails ActiveRecord modelRails ActiveRecord 模型上的“语言”属性
【发布时间】: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


    【解决方案1】:

    如果您有名称冲突,Ruby 应用程序通常会开始表现出奇怪或怪异的行为。也许是某种保留字,或者是列和方法名之间的冲突。您的模型或插件中是否还有其他名为 language 的内容?

    【讨论】:

    • 不,在模型或任何已安装的插件中​​都没有名称为language 的其他方法。我已将使用过的宝石添加到我的问题中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    • 2014-07-01
    • 2012-04-25
    相关资源
    最近更新 更多