mysql - Ruby on Rails has_one 模型不提供 ID 列

标签 mysql ruby-on-rails activerecord has-one

我有一个旧版 Rails(版本 1.2.3)应用程序,它在许多服务器上运行没有问题(更不用说我的本地环境)。不过,部署到最新的服务器后,我现在收到 ActiveRecord::StatementInvalid: Mysql::Error: #23000Column 'video_id' can not be null 错误。

以下是简化的模型/关系:

class Video < ActiveRecord::Base
    has_one(:user, :dependent => :destroy)
end

class User < ActiveRecord::Base
    belongs_to(:video)
end

下面是失败关系的 Rails 控制台记录:

>> 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

还有其他人遇到过 ActiveRecord 在明确知道 ID 的情况下却没有发送 ID 的情况吗?

最佳答案

正确的语法是

video.user.create(:name => 'Tester')

如您所见,它会尝试根据 ruby​​ 的评估顺序创建用户,然后将其分配给 video.user。

关于mysql - Ruby on Rails has_one 模型不提供 ID 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2686612/

相关文章:

ruby-on-rails - Ruby/Rails 将字符串转换为类属性

mysql - Rails ActiveRecord - 有没有办法在没有 id 的情况下对表执行操作?

activerecord - 如何使用 ActiveRecord 将 STI 表中的不同类组合成单个结果集?

php - mysqli错误fetch_assoc()

mysql - 选择两个值相等的几个 id

c# - 使用 .NET Standard 1.4 或 1.5 查询 MySQL DB

ruby-on-rails - 如何使用 cocoon gem 处理 Rails 4 中嵌套表单的数据?

mysql - 我应该为 Magento 启用还是禁用 mysql query_cache?

ruby-on-rails - Rails cancan :manage all Offers as moderator which belong to the same Department

php - Yii2 - 事件记录查询在字符串字段中搜索数字