我正在使用Ruby on Rails和paths_of_glory
gem
我需要访问用户完成的成就类型,以便与每个特定成就一起显示图片。当我尝试通过@user.achievements.type
访问它时,我得到一个错误,表示它想要返回“数组”(如在成就中是一个数组),而不是实际返回数据库的类型列中的元素。
由于每个ruby对象都有一个名为type
的方法,因此我访问数据库类型列的调用失败。当我尝试更改表中的条目时,paths_of_glory
gem表示它需要一个类型列才能正常运行。
我不太确定从这里开始,以便访问数据库中的该列。有什么建议吗?
答案 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