键入方法干扰数据库类型列问题

时间:2010-07-09 21:06:11

标签: ruby-on-rails ruby

我正在使用Ruby on Rails和paths_of_glory gem

我需要访问用户完成的成就类型,以便与每个特定成就一起显示图片。当我尝试通过@user.achievements.type访问它时,我得到一个错误,表示它想要返回“数组”(如在成就中是一个数组),而不是实际返回数据库的类型列中的元素。

由于每个ruby对象都有一个名为type的方法,因此我访问数据库类型列的调用失败。当我尝试更改表中的条目时,paths_of_glory gem表示它需要一个类型列才能正常运行。

我不太确定从这里开始,以便访问数据库中的该列。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

不完全确定你在这里问的是什么,但也许这会有所帮助。

首先,@user.achievements是一个数组,因为你有多个成就,而类型方法适用于@user.achievements的各个元素,这就是为什么它不能像那样工作。你必须做这样的事情:

@user.achievements.each do |achievement|
  # Do stuff here
end

关于type列,type是Rails中专门用于单表继承的保留列,其中多个Rails模型使用单个数据库表。所以你不能直接访问它。我假设paths_of_glory以某种方式使用STI。您可以使用achievement.class之类的内容访问模型的类,如果只需要名称,则可以尝试使用achievement.class.to_s

@user.achievements.each do |achievement|
  model = achievement.class # => MyAwesomeAchievementClass
  @image = model.picture    # You could write some method in the model like this
end