发现与关系之间的区别

我不认为在主动记录和查找数据方面存在差异。

这是我的模特

class User < ActiveRecord::Base has_many :shows end class Show < ActiveRecord::Base belongs_to :user end 

当我使用rails控制台时,我可以执行以下操作并且它可以正常工作。

 u = User.find(1) u.shows 

它为我提供了该用户的所有节目。

但是,当我这样做

 u = User.where("username = ?", "percent20") u.shows # this is doesn't work gives me a now instance error 

我得到相同的用户和相关信息,但不是关系。 我能看到的唯一问题可能是我做错了,因为where和find之间存在一些差异。

任何帮助表示赞赏。

问题不在于关系。

  u = User.find(1) 

返回一个用户

  #return a Set of users. In your case its only one user. u = User.where("username = ?", "percent20") 

结果类型是ActiveRecord :: Relation – > [User,User,User]

首先使用例如获得第一个用户

  #returns the first user u = User.where("username = ?", "percent20").first 

u.class.name =>“用户”

User.find(1)正在检索具有其ID的特定记录,而User.where(“username =?”,“percent20”)正在检索与该条件匹配的记录集。

尝试:

 u = User.where("username = ?", "percent20").first u.shows 

where是返回对象数组的方法。 所以,在你的情况下尝试

 u.each { |user| user.shows }