假设我有一个名为Tweet的模型,其中包含以下字段
现在假设我使用以下查询@tweet = Tweet.where(id:64)查询此模型,此查询返回一个没有字段为nil的对象。
为什么我不能通过@ tweet.id或@ tweet.content来访问字段?我为NoMethodError: undefined method
#Tweet::ActiveRecord_Relation:0x00000006e6ce80
id'
我在尝试对此查询产生的对象执行@original.id
时遇到错误:
@original
=> #<ActiveRecord::Relation [#<Tweet id: 64, content: "Unde et nisi blanditiis vel occaecati soluta praes...", user_id: 4, created_at: "2014-12-22 08:56:46", updated_at: "2014-12-22 08:56:46", picture: nil, group: nil, original_tweet_id: nil>]>
我的红宝石知识中的东西真的很缺失......帮助!!!
答案 0 :(得分:2)
@original不是Tweet实例,而是ActiveRecord :: Relation
如果您想直接访问Tweet的ID,您应该像这样定义@original
@original = Tweet.find_by_id(64)
或
@original = Tweet.where(id: 64).first
答案 1 :(得分:1)
这是因为where返回集合而不是单个对象
所以而不是
@tweet = Tweet.where(id: 64)
你想要
@tweet = Tweet.find(64)
因为您正在使用ID
答案 2 :(得分:1)
在您的情况下,它返回Active Record Relation对象的集合
所以特定记录
@original.first.id
为您提供64
或
@tweet = Tweet.find(64)
@tweet.id #64
@tweet.content # "Unde et nisi blanditiis vel occaecati soluta praes..."
答案 3 :(得分:1)
请执行此操作,您需要添加first
@tweet = Tweet.where(id: 64).first