내 로컬 환경은 말할 것도없이 여러 서버에서 문제없이 실행되는 레거시 레일 (버전 1.2.3) 앱이 있습니다. 최신 서버에 배포했는데 이제는 ActiveRecord::StatementInvalid: Mysql::Error: #23000Column 'video_id' cannot be null
오류가 발생합니다. 아래Ruby on Rails has_one 모델이 제공되지 않음 ID 열
class Video < ActiveRecord::Base
has_one(:user, :dependent => :destroy)
end
class User < ActiveRecord::Base
belongs_to(:video)
end
그리고 실패한 관계의 레일 콘솔 성적 증명서입니다 : 아래
단순화, 모델/관계이다다른 사람은 ID 경우를 전송하지 액티브 건너했습니다
>> video = Video.create(:title => 'New Video')
=> #<Video:0xb6d5e31c>...
>> video.id
=> 5
>> video.user = User.create(:name => 'Tester')
ActiveRecord::StatementInvalid: Mysql::Error: #23000Column 'video_id' cannot be null: INSERT INTO users (`name`, `video_id`) VALUES('Tester', NULL)
from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/connection_adapters/abstract_adapter.rb:128:in `log'
from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/connection_adapters/mysql_adapter.rb:243:in `execute'
from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/connection_adapters/mysql_adapter.rb:253:in `insert'
from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/base.rb:1811:in `create_without_callbacks'
from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/callbacks.rb:254:in `create_without_timestamps'
from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/timestamp.rb:39:in `create'
from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/base.rb:1789:in `create_or_update_without_callbacks'
from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/callbacks.rb:242:in `create_or_update'
from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/base.rb:1545:in `save_without_validation'
from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/validations.rb:752:in `save_without_transactions'
from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/transactions.rb:129:in `save'
from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/connection_adapters/abstract/database_statements.rb:59:in `transaction'
from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/transactions.rb:95:in `transaction'
from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/transactions.rb:121:in `transaction'
from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/transactions.rb:129:in `save'
from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/base.rb:451:in `create'
from (irb):3
from :0
그것을 분명히 알고 있습니까?
또는 'video.user = User.create (: name =>'Tester ', : video_id => video.id)'. 그 이유는 비디오 외부에서 User 모델을 만들고 명시 적으로 설정하기 때문입니다. 이 경우 레일즈는 뛰어 들지 않으며 마술을하지 않습니다. 왜냐하면 여러분 스스로 일을하고 있기 때문입니다. 이것을 피하려면 위와 같이하십시오. –
이것은 오래된 앱이지만 내 구문은 여러 위치에서 불만없이 사용됩니다. 새로운 구문을 사용하면 다음과 같은 결과가 나타납니다. NoMethodError : 예상치 못한 경우 객체가 없습니다! ActiveRecord :: Base의 인스턴스를 예상했을 수 있습니다. nil.create를 평가하는 중 오류가 발생했습니다. \t (irb) : 3 \t 출처 : 0 –
죄송합니다. 나는 그것을 저장할 수 없다면 User.create가 레코드를 반환한다는 것을 잊었다. – mckeed