如果表名中有“_”,如何在Rails控制台中访问该表?

4

我正在尝试访问一个表中所有的记录,该表名包含一个下划线。例如,如果我的模式中有一个名为trips的表,我可以在rails控制台中使用Trip.all。但是如果我的表名包含一个下划线(例如users_foods),我该怎么办?

我尝试了以下选项:

Users_food.all
User_food.all
User_foods.all 
etc.

以上所有方法均未能解决问题,有什么建议吗?
3个回答

4

理解了 可以通过 UserFood 访问数据


0

在创建bonus_histories表时,我遇到了同样的问题。直到我找出原因之前,任何答案都没有起作用。

我只使用了rails g migration BonusHistory
这就是问题所在。我的Rails控制台根本找不到BonusHistory,因为我没有相应的模型。

因此,我必须先回滚迁移rake db:rollback STEP=1,然后删除迁移文件,最后执行

rails g model BonusHistory

并在迁移该表后,当我进入Rails控制台时,我可以成功查询BonusHistory.count


0
对于名为users_foods的表,ActiveModel应该为您提供相应的Rails模型UsersFood,以适应Ruby/Rails对象命名约定。请尝试一下。
类名Users_foodUser_food等不符合Ruby约定。

不起作用。我想我会将我的模式名称更改为符合Ruby约定。 - Quantico
有趣(也有点奇怪)。不,你的表名很好,实际上不应该改成Ruby约定。这就是ActiveModel(Rails的一部分)的全部意义,它将数据库特定操作从Ruby对象和模型中抽象出来。 - changingrainbows
那么你有其他建议吗? - Quantico
这一定是更根本的问题。也许与Rails本身的设置有关,或者与相应的模型有关。为了确认这一点,我会启动一个全新的默认Rails应用程序(通过$ rails new new_app),然后通过$ rails generate model UsersFood username:string创建一个新模型。然后运行$ rake db:migrate应该创建一个名为users_food的数据库表。基本上,这验证了您一直在尝试做的事情的反向操作。如果这样可以工作,您可以将其设置用作与无法正常工作的项目进行比较的依据。 - changingrainbows
弄清楚它是UserFood。 - Quantico

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接