Почему это существует? - PullRequest
       0

Почему это существует?

1 голос
/ 02 августа 2011

Так как же возможно, что

@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

Ответы [ 2 ]

4 голосов
/ 02 августа 2011

Это не тот ответ, который вы ищете - я неправильно понял вопрос.Я думаю, что Джереми был прав в своем комментарии выше.

Потому что в Ruby все, что не равно нулю и не явно false, оценивается как true в логических сравнениях, даже 0.@article.authors, в данном случае, является пустым массивом, или [].[] - это не ноль, и это не false, поэтому в логическом сравнении оно оценивается как true.Метод empty? для объекта массива возвращает значение true, если массив пустой, или [], что в данном случае равно.

Вот более подробная информация об этом: http://railsclub.com/2011/03/the-difference-between-nil-true-false-blank-and-empty/

1 голос
/ 02 августа 2011

Правильно, думаю, что я решил это, потому что @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

То есть возвращается, есть ли авторы без статьи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...