Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Rails 4:左联接获取联接模型的值_Sql_Ruby_Ruby On Rails 4 - Fatal编程技术网

Sql Rails 4:左联接获取联接模型的值

Sql Rails 4:左联接获取联接模型的值,sql,ruby,ruby-on-rails-4,Sql,Ruby,Ruby On Rails 4,我有3种型号: class User < ActiveRecord::Base has_many :likes, :dependent => :destroy end class Movie < ActiveRecord::Base has_many :likes, :primary_key => :mid, :foreign_key => :item_id end class Like < ActiveRecord::Base belongs

我有3种型号:

class User < ActiveRecord::Base
  has_many :likes, :dependent => :destroy
end

class Movie < ActiveRecord::Base
  has_many :likes, :primary_key => :mid, :foreign_key => :item_id
end

class Like < ActiveRecord::Base
  belongs_to :user
  belongs_to :movie, :foreign_key => :item_id, :primary_key => :mid
end
在本例中,用户喜欢电影《阿凡达与角斗士》,同时更改电影状态(
扩展的
固定的

现在,当我想在一个视图中显示所有3部电影时,我想以登录用户想要的方式显示电影的状态<代码>(化身=>展开并固定,角斗士=>固定,怪物史莱克=>无)

到目前为止,我的解决方案是加载所有电影,然后检查查询每个电影的状态。。。这导致了太多的查询

所需的表如下所示:

+---------------------------------------------------------------+
| user_id | expanded | pinned | item_id / mid |  title   | year |
|---------|----------|--------|---------------|----------|------|
|    1    |   true   |  true  |       1       | Avatar   | 2006 |
|    1    |   false  |  true  |       2       | Gladiator| 2000 |
|   null  |   null   |  null  |       3       | Shrek    | 2001 |
+---------------------------------------------------------------+
我知道查询应该通过
includes
建立连接

                                                                # ( 1 )
movies = Movie.includes(:likes).where(:likes => {:user_id => current_user.id }).references(:likes)
但是,在循环浏览电影时,我似乎无法获取加入的
likes
表的数据,例如
expanded
状态:

movies.each do |m|
  puts m.expanded
  puts m.likes.expanded
end
# => undefined method `expanded' for #ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_Like:0x007fae7ea51f48

我似乎不知道出了什么问题。提前谢谢

我认为Rails在给出解释性异常方面不是很好,但您应该尽量理解它们:

# => undefined method `expanded' for #ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_Like:0x007fae7ea51f48
因此,这个错误告诉您,在您认为应该扩展的地方没有方法
expanded

造成这种情况的原因是您自己的代码中存在bug

一个好的程序员总是考虑他或她可能做错了什么,所以让我们看看你的代码:

m.likes.expanded
这里有一个类为
Movie
的对象。从您提供的代码中,我们可以看到它有很多喜欢的东西。这就是为什么结尾有一个
s
。它不是
喜欢
,而是
喜欢
。所以它是一个对象列表。在本例中,它是从数据库连接的对象的延迟加载数组。在Rails中,这些由
ActiveRecord::Associations::CollectionProxy
处理

因此,您正在该代理对象的实例上调用
expanded
,但是您希望在类似
实例上调用它


如果你想这样做,你也需要重复这些,或者选择一个相关的,这可能与当前用户所做的一样。

我认为Rails在给出解释性异常方面不是很好,但你应该尽量理解它们:

# => undefined method `expanded' for #ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_Like:0x007fae7ea51f48
因此,这个错误告诉您,在您认为应该扩展的地方没有方法
expanded

造成这种情况的原因是您自己的代码中存在bug

一个好的程序员总是考虑他或她可能做错了什么,所以让我们看看你的代码:

m.likes.expanded
这里有一个类为
Movie
的对象。从您提供的代码中,我们可以看到它有很多喜欢的东西。这就是为什么结尾有一个
s
。它不是
喜欢
,而是
喜欢
。所以它是一个对象列表。在本例中,它是从数据库连接的对象的延迟加载数组。在Rails中,这些由
ActiveRecord::Associations::CollectionProxy
处理

因此,您正在该代理对象的实例上调用
expanded
,但是您希望在类似
实例上调用它


如果你想这样做,你也需要重复这些,或者选择一个相关的,这可能与当前用户所做的一样。

我认为Rails在给出解释性异常方面不是很好,但你应该尽量理解它们:

# => undefined method `expanded' for #ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_Like:0x007fae7ea51f48
因此,这个错误告诉您,在您认为应该扩展的地方没有方法
expanded

造成这种情况的原因是您自己的代码中存在bug

一个好的程序员总是考虑他或她可能做错了什么,所以让我们看看你的代码:

m.likes.expanded
这里有一个类为
Movie
的对象。从您提供的代码中,我们可以看到它有很多喜欢的东西。这就是为什么结尾有一个
s
。它不是
喜欢
,而是
喜欢
。所以它是一个对象列表。在本例中,它是从数据库连接的对象的延迟加载数组。在Rails中,这些由
ActiveRecord::Associations::CollectionProxy
处理

因此,您正在该代理对象的实例上调用
expanded
,但是您希望在类似
实例上调用它


如果你想这样做,你也需要重复这些,或者选择一个相关的,这可能与当前用户所做的一样。

我认为Rails在给出解释性异常方面不是很好,但你应该尽量理解它们:

# => undefined method `expanded' for #ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_Like:0x007fae7ea51f48
因此,这个错误告诉您,在您认为应该扩展的地方没有方法
expanded

造成这种情况的原因是您自己的代码中存在bug

一个好的程序员总是考虑他或她可能做错了什么,所以让我们看看你的代码:

m.likes.expanded
这里有一个类为
Movie
的对象。从您提供的代码中,我们可以看到它有很多喜欢的东西。这就是为什么结尾有一个
s
。它不是
喜欢
,而是
喜欢
。所以它是一个对象列表。在本例中,它是从数据库连接的对象的延迟加载数组。在Rails中,这些由
ActiveRecord::Associations::CollectionProxy
处理

因此,您正在该代理对象的实例上调用
expanded
,但是您希望在类似
实例上调用它


如果你想这样做,你也需要迭代这些,或者选择一个相关的,这可能是当前用户所做的。

你是我的英雄!我的db结构意味着
m.likes
总是包含1项,但盲目地假设Rails会自动选择生成的列表中的第一项是我出错的地方。因此,使用
m.likes.first.expanded
非常有效在这种情况下,您应该使用进一步测试后实现的
has_one
关系