发现与关系之间的区别

时间:2011-03-06 20:58:28

标签: ruby-on-rails ruby-on-rails-3 activerecord

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

以下是我的模特

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之间存在一些差异。

感谢任何帮助。

3 个答案:

答案 0 :(得分:10)

问题不在于关系。

 u = User.find(1) 

返回一个用户

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

结果类型是ActiveRecord :: Relation - &gt; [用户,用户,用户]

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

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

u.class.name =&GT; “用户”

答案 1 :(得分:5)

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

尝试:

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

答案 2 :(得分:3)

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

u.each { |user| user.shows }