【问题标题】:Rail 4 refuses save record to database - belongs_toRail 4 拒绝将记录保存到数据库 - belongs_to
【发布时间】:2014-08-03 02:32:07
【问题描述】:

问题

Rails 控制台不会将我的记录保存到数据库中,如果它具有belongs_to 关联。

2.1.1 :002 > Track.create name: 'asdfasdf'
(0.1ms)  begin transaction
SQL (0.6ms)  INSERT INTO "records" ("created_at", "updated_at") VALUES (?, ?)  [["created_at", "2014-06-12 15:58:20.868095"], ["updated_at", "2014-06-12 15:58:20.868095"]]
(45.9ms)  commit transaction
=> #<Track id: nil, record_id: 1, name: "asdfasdf", created_at: nil, updated_at: nil>



class Record < ActiveRecord::Base
  has_many :tracks
  accepts_nested_attributes_for :tracks, allow_destroy: true
end

class Track < ActiveRecord::Base
  belongs_to :record
end

class CreateRecords < ActiveRecord::Migration
  def change
    create_table :records do |t|
      t.string :title
      t.timestamps
    end
  end
end

class CreateTracks < ActiveRecord::Migration
  def change
    create_table :tracks do |t|
      t.belongs_to :record
      t.string :name
      t.timestamps
    end
  end
end

如您所见, :id 字段为零。 :record_id 字段改为递增。 我已经尝试重置主键,但问题仍然存在。然而,这不是我的主要问题,因为插入后甚至没有保存记录。

2.1.1 :003 > Track.last
Track Load (0.3ms)  SELECT  "tracks".* FROM "tracks"   ORDER BY "tracks"."id" DESC LIMIT 1
=> nil

这是一个问题,因为它阻止我使用像 this one 这样的嵌套表单。当我下载并运行that rails 应用程序时,它运行良好。

2.1.1 :002 > Answer.create content: 'swwaaagggggs'
(0.2ms)  begin transaction
SQL (0.8ms)  INSERT INTO "answers" ("content", "created_at", "updated_at") VALUES (?, ?, ?)  [["content", "swwaaagggggs"], ["created_at", "2014-06-12 16:46:04.989529"], ["updated_at", "2014-06-12 16:46:04.989529"]]
(58.9ms)  commit transaction
=> #<Answer id: 3, question_id: nil, content: "swwaaagggggs", created_at: "2014-06-12 16:46:04", updated_at: "2014-06-12 16:46:04">

然而,当我完全自己重新创建它时,我遇到了同样的问题。

奇怪

如果我回滚迁移并删除关联,我会得到这个。

2.1.1 :003 > Track.create name: 'swagger'
(0.2ms)  begin transaction
SQL (0.7ms)  INSERT INTO "records" ("created_at", "updated_at") VALUES (?, ?)  [["created_at", "2014-06-12 16:06:12.443845"], ["updated_at", "2014-06-12 16:06:12.443845"]]
(0.2ms)  rollback transaction
ActiveModel::MissingAttributeError: can't write unknown attribute `record_id'



class Record < ActiveRecord::Base
end

class Track < ActiveRecord::Base
end

class CreateRecords < ActiveRecord::Migration
  def change
    create_table :records do |t|
      t.string :title
      t.timestamps
    end
  end
end

class CreateTracks < ActiveRecord::Migration
  def change
    create_table :tracks do |t|
      t.string :name
      t.timestamps
    end
  end
end

当列不再存在时,请注意对 :record_id 的引用

我很茫然。

Google 页面已用完,但似乎没有其他人遇到此问题,这导致我认为过去 2 天我的代码有问题; “这种有据可查的东西不应该这么难,”我想。如果有人能帮我解决这个问题,我将不胜感激。

如果您需要更多信息,请告诉我这是我第一次觉得有必要在 StackOverflow 上发帖。

【问题讨论】:

  • 您是否尝试在迁移中简单地使用 t.integer :record_id 而不是 t.belongs_to :record ?
  • 这是这个的输出。 StandardError:发生错误,此迁移和所有后续迁移已取消:您无法重新定义主键列“id”。

标签: ruby-on-rails rails-activerecord rails-console


【解决方案1】:

【讨论】:

  • 你是我的英雄。就是这样。我一直在寻找错误的方向。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-23
  • 1970-01-01
  • 2016-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多