在前一种情况下,它工作得很好,因为@user指向一个userobject。假设您的用户模型具有以下属性(id、name、created_at、updated_at)。
@user= User.find(current_user.id)
@user.class
=> User(id: integer, name: string, created_at: datetime, updated_at: datetime, etc)
@user
=> #<User id: 1, name: "Amar",created_at: "2013-07-10 10:07:37", updated_at: "2013-07-10 10:07:37">
所以现在你的实例变量@user指向一个用户对象,所以下面的工作。
@users_cities = @user.cities
但是在 where 的情况下,它是一个关系,并且实例变量包含一个具有单个记录的数组。
@user= User.where(:id => current_user.id)
@user.class
=> ActiveRecord::Relation
@user
=> [#<User id: 1, name: "Amar", created_at: "2013-07-10 10:07:37", updated_at: "2013-07-10 10:07:37">]
在这里,@user没有指向用户对象,因此您无法获取与该用户相关的城市。您可以尝试以下方法。
@user= User.where(:id => current_user.id).first #first gets the first object from the array.
@user.class
=> User(id: integer, name: string, created_at: datetime, updated_at: datetime, etc)
@user
=> #<User id: 1, name: "Amar",created_at: "2013-07-10 10:07:37", updated_at: "2013-07-10 10:07:37">
在这种情况下,以下内容应该可以工作,因为您的实例变量@user已经使用first指向单个用户对象。
@users_cities = @user.cities
同样,在您的情况下,您将从 User 模型中获取一个数组
@other_users = User.where("id != ?", 1)
它将收集一组元素。所以你必须遍历数组才能找到它的城市。
@other_users.each do |user|
# do manipulation with user.cities
end
在这种情况下,如果您首先使用,那么它将仅指向数组中的第一个对象。所以遍历它以覆盖所有其他用户。