Rails关联异常:调用user_id.name报错Fixnum无name方法
解决Rails关联中调用外键属性的错误
嘿,我一眼就看出问题出在哪啦!你遇到的undefined method 'name' for 3707:Fixnum错误,根源是调用对象搞混了:
Showing /Users/ryousuke/projects/chat-space/app/views/messages/_message.html.haml undefined method `name' for 3707:Fixnum
你在视图里写的%h4 #{message.user_id.name},这里的user_id是Message表中存储的外键整数(比如报错里的3707),它只是个纯数字值,根本没有name方法。你真正要访问的是和这条消息关联的User实例,而不是外键字段本身。
解决方案
直接把代码改成:
%h4 #{message.user.name}
因为你已经在Message模型里配置了belongs_to :user,Rails会自动为你生成user这个关联方法,通过它就能拿到对应的User对象,之后调用name属性就完全没问题了。
额外检查点(防止关联失效)
为了确保关联能正常工作,你可以再确认这几点:
- 查看Message的数据库迁移文件,确保有
t.references :user或者t.integer :user_id字段,并且已经执行过rails db:migrate - 确认User模型里的
has_many :messages和Message模型的belongs_to :user是正确对应的 - 可以在Rails控制台里测试关联是否生效:
message = Message.first puts message.user # 如果能输出对应的User实例,说明关联没问题;如果是nil,可能是这条消息的user_id对应的User不存在
内容的提问来源于stack exchange,提问作者Ryosuke Kuwabara
相关产品推荐
相关产品推荐

