Rails 虚拟属性未更新

Posted

技术标签:

【中文标题】Rails 虚拟属性未更新【英文标题】:Rails Virtual Attributes Not Updating 【发布时间】:2012-07-13 18:36:14 【问题描述】:

我有一个模型“标签”,它链接到特定主题的 dbpedia 文章。我想创建一个虚拟属性,它将使用这个 dbpedia URI 来生成一个*** URI。下面是这个类的大致样子:

class Tag < ActiveRecord::Base

  # Validation
  validates_presence_of :dbpedia_uri, :label

  #Virtual Attribute
  def wikipedia_uri
    "#dbpedia_uri".gsub("dbpedia.org/resource", "wikipedia.org/wiki")    
  end

end

当我进入控制台并尝试检查 Tag.all[1].wikipedia_uri 时,我收到以下错误:

NoMethodError: undefined method `wikipedia_uri' for #<Tag:0xa0c79ac>

此外,我还有第二个模型(地图),它具有可以工作的虚拟属性,但是当我更改它们时,我仍然得到旧值。所以当代码是:

 def thumbnail_uri
    "#map_base_uri/thumbnails/#identifier.jpg"
  end

Map.all[1].thumbnail_uri 返回类似:“http://WEBSITE/maps/thumbnails/g3201b.ct002662.jpg”

当我将代码更改为:

def thumbnail_uri
   "test"
end

我仍然得到输出:“http://WEBSITE/maps/thumbnails/g3201b.ct002662.jpg”

我尝试重新加载我的 Rails 控制台,但它似乎仍然没有更新虚拟属性。关于可能导致此问题的任何想法?

【问题讨论】:

你做了什么来重新加载你的控制台?您是否退出并重新启动它? 好像that question 你在那个属性上试过attr_accessible吗? 我使用 Ctrl+D 退出控制台,然后再次手动进入 rails 控制台。我也尝试过使用attr_accessible,但它什么也没做。 【参考方案1】:

解决了这个问题。我愚蠢地在一个目录中运行我的控制台以获取一组重复的文件备份,因此备份中的所有方法和变量都在控制台中可用,但我对当前代码的更改并没有影响它

【讨论】:

以上是关于Rails 虚拟属性未更新的主要内容,如果未能解决你的问题,请参考以下文章

Rails 3 - 验证虚拟属性导致异常

Rails 嵌套模型和虚拟属性初始化

在另一个模型控制器中使用的 Rails 3 虚拟属性

Rails 虚拟属性搜索或 sql 组合列搜索

在 Rails 4 中使用虚拟属性计算和显示日期

具有虚拟属性的 after_save 回调 Rails 3