当我尝试访问从DB获取的对象的字段时,NoMethodError

时间:2015-02-13 14:56:01

标签: ruby-on-rails

假设我有一个名为Tweet的模型,其中包含以下字段

     
  • 1。 ID
  •  
  • 2。含量
  •  
  • 3。 created_at
  •  
  • 4。 USER_ID
  •  
  • 5。 original_tweet_id

现在假设我使用以下查询@tweet = Tweet.where(id:64)查询此模型,此查询返回一个没有字段为nil的对象。

为什么我不能通过@ tweet.id或@ tweet.content来访问字段?我为NoMethodError: undefined method

收到NoMethodError #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>]>

我的红宝石知识中的东西真的很缺失......帮助!!!

4 个答案:

答案 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