Thanks for the link. I came across it yesterday as well. I just tried it against master. Just adding required: true has the same issue. If you use the suggested null: false in the migration to add a constraint on the DB you get an extremely ugly ActiveRecord::StatementInvalid error due to violating the DB constraint:
ActiveRecord::StatementInvalid: SQLite3::ConstraintException: comments.post_id may not be NULL: INSERT INTO "comments" DEFAULT VALUES ~/.gem/ruby/2.1.2/gems/sqlite3-1.3.9/lib/sqlite3/statement.rb:108:in `step' ~/.gem/ruby/2.1.2/gems/sqlite3-1.3.9/lib/sqlite3/statement.rb:108:in `block in each' ~/.gem/ruby/2.1.2/gems/sqlite3-1.3.9/lib/sqlite3/statement.rb:107:in `loop' ~/.gem/ruby/2.1.2/gems/sqlite3-1.3.9/lib/sqlite3/statement.rb:107:in `each' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb:305:in `to_a' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb:305:in `block in exec_query' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb:464:in `block in log' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activesupport/lib/active_support/notifications/instrumenter.rb:20:in `instrument' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb:458:in `log' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb:299:in `exec_query' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:76:in `exec_insert' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:103:in `insert' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb:14:in `insert' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activerecord/lib/active_record/relation.rb:66:in `insert' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activerecord/lib/active_record/persistence.rb:521:in `_create_record' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activerecord/lib/active_record/counter_cache.rb:139:in `_create_record' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activerecord/lib/active_record/attribute_methods/dirty.rb:122:in `_create_record' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activerecord/lib/active_record/callbacks.rb:306:in `block in _create_record' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activesupport/lib/active_support/callbacks.rb:83:in `run_callbacks' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activerecord/lib/active_record/callbacks.rb:306:in `_create_record' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activerecord/lib/active_record/timestamp.rb:57:in `_create_record' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activerecord/lib/active_record/persistence.rb:501:in `create_or_update' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activerecord/lib/active_record/callbacks.rb:302:in `block in create_or_update' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activesupport/lib/active_support/callbacks.rb:114:in `call' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activesupport/lib/active_support/callbacks.rb:114:in `call' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activesupport/lib/active_support/callbacks.rb:166:in `block in halting' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activesupport/lib/active_support/callbacks.rb:87:in `call' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activesupport/lib/active_support/callbacks.rb:87:in `run_callbacks' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activerecord/lib/active_record/callbacks.rb:302:in `create_or_update' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activerecord/lib/active_record/persistence.rb:120:in `save' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activerecord/lib/active_record/validations.rb:36:in `save' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activerecord/lib/active_record/attribute_methods/dirty.rb:21:in `save' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activerecord/lib/active_record/transactions.rb:284:in `block (2 levels) in save' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activerecord/lib/active_record/transactions.rb:345:in `block in with_transaction_returning_status' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:208:in `block in transaction' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb:188:in `within_new_transaction' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:208:in `transaction' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activerecord/lib/active_record/transactions.rb:218:in `transaction' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activerecord/lib/active_record/transactions.rb:342:in `with_transaction_returning_status' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activerecord/lib/active_record/transactions.rb:284:in `block in save' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activerecord/lib/active_record/transactions.rb:299:in `rollback_active_record_state!' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activerecord/lib/active_record/transactions.rb:283:in `save' ~/.gem/ruby/2.1.2/bundler/gems/rails-893b7b8b0cd8/activerecord/lib/active_record/persistence.rb:34:in `create' This would result in a server error instead of a possibly kicked-back error. Hmm…I actually just tested destroying the associated object before creation and presence: true doesn’t actually do what the docs claim either. It incorrectly saved the object. On Thursday, September 11, 2014 7:55:11 PM UTC-4, Allen Madsen wrote: I could be wrong but I think the first feature described in this rails > 4.2 article solves the problem you're describing. > > http://raysrashmi.com/2014/09/02/new-features-in-rails-4-2 > > TL;DR > > You can do this: > > class User < ActiveRecord::Base > belongs_to :account, required: true > has_one :profile, required: true > end > > Hope that helps, > > Allen Madsen > http://www.allenmadsen.com > -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-core+unsubscr...@googlegroups.com. To post to this group, send email to rubyonrails-core@googlegroups.com. Visit this group at http://groups.google.com/group/rubyonrails-core. For more options, visit https://groups.google.com/d/optout.