那怎么可能
@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
和
class Article < ActiveRecord::Base
has_many :authors
accepts_nested_attributes_for :authors
end
答案 0 :(得分:4)
这不是你要找的答案 - 我误解了这个问题。我认为Jeremy在上面的评论中说得对。
因为在Ruby中,任何非零且未明确false
的内容在布尔比较中评估为true
,甚至0
。在这种情况下,@article.authors
是一个空数组,或[]
。 []
不是nil,它不是false
,因此在布尔比较中它被评估为true
。如果数组为空,则数组对象上的empty?
方法返回true,或[]
,在这种情况下为{。}}。
以下是有关此内容的更广泛信息:http://railsclub.com/2011/03/the-difference-between-nil-true-false-blank-and-empty/
答案 1 :(得分:1)
是的,我想我已经解决了,因为@article尚未保存,
@ article.authors.exists?
运行sql:
[1m[36mCACHE (0.0ms)[0m [1mSELECT 1 FROM `authors` WHERE `authors `.`type` IN ('professional') AND `authors `.`article_id` IS NULL LIMIT 1[0m
所以它返回是否有任何作者没有文章。