В Rails, почему сохранение новой записи возвращает ноль, и ничего не сохраняется? - PullRequest
2 голосов
/ 04 января 2012

Я инициализирую объект AdUnit au с

au = AdUnit.new (cp)

, где cp равно:

{:name=>"second56", :description=>nil, :target_window=>"BLANK", :explicitly_targeted=>false, :ad_unit_sizes_attributes=>[{:height=>90, :width=>728, :is_aspect_ratio=>false, :environment_type=>"BROWSER"}], :dfp_id=>"22319511", :parent_id_dfp=>"22261791"}

и полученный объект au равен

#<AdUnit id: nil, dfp_id: "22319511", parent_id_dfp: "22261791", parent_id_bulk: nil, name: "second56", description: nil, target_window: "BLANK", explicitly_targeted: false, created_at: nil, updated_at: nil>

На этом этапе au.valid? и au.new_record? оба возвращают true.

Если я сделаю au.save (или au.save! в этом отношении), результат будет nil и ничего не будет сохранено в базе данных. но если я сделаю

aud = au.dup
aud.save

результат true и запись сохранена.

Я могу сохранить свой объект с помощью дублирующего обходного пути, но мне это кажется странным. Кто-нибудь может дать какие-либо идеи относительно того, почему это происходит? Ниже фрагменты SQL из двух операторов save из консоли Rails.

Заранее спасибо всем гуру Rails.

Возвращает nil и не сохраняет:

SQL (1.0ms) INSERT INTO "ad_units" ("created_at", "description", "dfp_id", "explicitly_targeted", "name", "parent_id_bulk", "parent_id_dfp", "target_window", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) [["created_at", Wed, 04 Jan 2012 17:28:37 UTC +00:00], ["description", nil], ["dfp_id", "22400631"], ["explicitly_targeted", false], ["name", "zapiFirstLevel366"], ["parent_id_bulk", nil], ["parent_id_dfp", "1166751"], ["target_window", "BLANK"], ["updated_at", Wed, 04 Jan 2012 17:28:37 UTC +00:00]] => nil

Возвращение true и сохранение:

SQL (0.9ms) INSERT INTO "ad_units" ("created_at", "description", "dfp_id", "explicitly_targeted", "name", "parent_id_bulk", "parent_id_dfp", "target_window", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) [["created_at", Wed, 04 Jan 2012 17:29:58 UTC +00:00], ["description", nil], ["dfp_id", "22400631"], ["explicitly_targeted", false], ["name", "zapiFirstLevel366"], ["parent_id_bulk", nil], ["parent_id_dfp", "1166751"], ["target_window", "BLANK"], ["updated_at", Wed, 04 Jan 2012 17:29:58 UTC +00:00]] => true

Ответы [ 2 ]

4 голосов
/ 07 января 2012

ОК, это было вызвано использованием accepts_nested_attributes_for, когда AdUnit имеет отношение has_and_belongs_to_many с AdUnitSize.Итак, я узнал, что эти двое не работают вместе.

Единственное, возможно, было бы неплохо иметь где-то предупреждение вместо того, чтобы узнавать об этом из .save, возвращая nil для объекта valid? = true вместо true или false.

2 голосов
/ 04 января 2012

Использование save! вызывает исключение, если запись недействительна. Он ничего не возвращает.

Если вам нужно возвращаемое значение, используйте только save.

Обычно, если save! не повышается, запись успешно сохраняется. Если вы этого не видите, значит, вы загружаете его неправильно.

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