Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.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/20.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
Ruby on rails rubyonrails中includes方法的使用_Ruby On Rails_Ruby_Syntax_Include - Fatal编程技术网

Ruby on rails rubyonrails中includes方法的使用

Ruby on rails rubyonrails中includes方法的使用,ruby-on-rails,ruby,syntax,include,Ruby On Rails,Ruby,Syntax,Include,我不明白以下代码的{article::categories}含义。 我已经阅读了文档,但它没有显示像includes(z=>{x::y})这样的示例。有人能把它换成我能理解的另一种形式吗?什么是x::y @articles = ArticleBase.includes(media.to_sym => { article: :categories }) 此外,如果我想向它添加另一个条件(.includes(media.to_sym=>:article)),下面的代码语法是否正确 @arti

我不明白以下代码的
{article::categories}
含义。 我已经阅读了文档,但它没有显示像
includes(z=>{x::y})
这样的示例。有人能把它换成我能理解的另一种形式吗?什么是
x::y

@articles = ArticleBase.includes(media.to_sym => { article: :categories })
此外,如果我想向它添加另一个条件(
.includes(media.to_sym=>:article)
),下面的代码语法是否正确

@articles = ArticleBase.includes(media.to_sym => { article: :categories }, media.to_sym => :article)

这里发生的事情是,他们只是在散列中动态分配一个散列键,该散列键作为参数提供给
#includes

"foo".then do |media|
  { media.to_sym => { article: :categories }}
end
=> {:foo=>{:article=>:categories}}
当您使用哈希火箭哈希语法而不是冒号语法时,这是可能的

{ media.to_sym: bar } # Raises a SyntaxError
下面的代码语法正确吗

@articles = ArticleBase.includes(media.to_sym => { article: :categories }, media.to_sym => :article)
不是真的。它不会引发语法错误,但也不会做您想要做的事情。当您有一个具有重复键的哈希文本时,Ruby不会警告您——它只是用该键的最后一个给定值进行覆盖

"foo".then do |media|
  { media.to_sym => { article: :categories }, media.to_sym => :acticle }
end
# => {:foo=>:acticle}

由于
{article::categories}
将在结果集中包含
article

它是一个(嵌套的)关系,因此您不需要编写多个查询,因此也不清楚这段代码应该完成什么。“主要”关系由媒体指定,即动态指定。看看rails控制台——它应该输出SQL查询,这可能有助于理解发生了什么。(取决于您的数据库架构)您阅读了吗?还有,你的车还不错。关于后一个问题,网上也有很多关于它的深入讨论。关于后一个问题:它的语法有效(我想?…试着运行它看看!),但这个具体的例子是没有意义的——因为你只包含了一个已经包含的关系。