Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.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 为什么会存在这种情况?_Ruby On Rails_Ruby On Rails 3_Activerecord_Collections - Fatal编程技术网

Ruby on rails 为什么会存在这种情况?

Ruby on rails 为什么会存在这种情况?,ruby-on-rails,ruby-on-rails-3,activerecord,collections,Ruby On Rails,Ruby On Rails 3,Activerecord,Collections,那怎么可能呢 @article.authors.exists? 是真的,而且 @article.authors.empty? 这也是真的吗 背景是一个新的行动: def new @article = Article.new # @article.build.authors unless @article.authors.exists? # @article.build.authors if @article.authors.empty? end 及 这不是你想要的答案——我误

那怎么可能呢

@article.authors.exists? 
是真的,而且

@article.authors.empty?
这也是真的吗

背景是一个新的行动:

def new
  @article = Article.new
  # @article.build.authors unless @article.authors.exists?
  # @article.build.authors if @article.authors.empty?
end

这不是你想要的答案——我误解了这个问题。我认为杰里米在上面的评论中说得对

因为在Ruby中,任何非nil且不显式为false的值在布尔比较中都会计算为true,甚至0@在本例中,article.authors是一个空数组,或[]。[]不是nil,也不是false,因此在布尔比较中将其计算为true。空房间?如果数组为空,则数组对象上的方法返回true;如果数组为空,则返回[],在本例中为空

这里有一些更广泛的信息:

这不是你想要的答案-我误解了这个问题。我认为杰里米在上面的评论中说得对

因为在Ruby中,任何非nil且不显式为false的值在布尔比较中都会计算为true,甚至0@在本例中,article.authors是一个空数组,或[]。[]不是nil,也不是false,因此在布尔比较中将其计算为true。空房间?如果数组为空,则数组对象上的方法返回true;如果数组为空,则返回[],在本例中为空


这里有一些更广泛的信息:

好吧,我想我已经解决了,因为@article还没有保存

@文章作者是否存在

运行sql:

[1m[36mCACHE (0.0ms)[0m  [1mSELECT 1 FROM `authors` WHERE `authors `.`type` IN ('professional') AND `authors `.`article_id` IS NULL LIMIT 1[0m

所以它返回是否有作者没有文章。

对,我想我已经解决了,因为@article还没有保存

@文章作者是否存在

运行sql:

[1m[36mCACHE (0.0ms)[0m  [1mSELECT 1 FROM `authors` WHERE `authors `.`type` IN ('professional') AND `authors `.`article_id` IS NULL LIMIT 1[0m

因此,它返回是否有作者没有文章。

是否可能您已从@article对象中删除了所有作者,但尚未将您的更改提交到数据库,因此存在?还是真的?您没有为此结果提供任何上下文。感谢您的回复Jeremy,更新了问题。我已重新创建了您的代码,在这种情况下,我得到@article.authors.exists?返回false和@article.authors.empty?返回true,如预期的那样。这很奇怪,我现在在调试器中,它说:@article.authors=>[],@article.authors.exists?=>True是否可能您已从@article对象中删除了所有作者,但尚未将更改提交到数据库,因此存在?还是真的?您没有为此结果提供任何上下文。感谢您的回复Jeremy,更新了问题。我已重新创建了您的代码,在这种情况下,我得到@article.authors.exists?返回false和@article.authors.empty?返回true,如预期的那样。这很奇怪,我现在在调试器中,它说:@article.authors=>[],@article.authors.exists?=>是的,我不认为是这样。存在?是ActiveRecord中的一个函数,用于查询数据库以查看是否可以找到行,并返回布尔值。它不只是在布尔上下文中计算数组。对不起,我一定是误读了这个问题,以为是@article.authors是真的,但却错过了答案?链中的方法。我不认为这是它。存在?是ActiveRecord中的一个函数,用于查询数据库以查看是否可以找到行,并返回布尔值。它不只是在布尔上下文中计算数组。对不起,我一定是误读了这个问题,以为是@article.authors是真的,但却错过了答案?链中的方法。