Mysql2 ::错误:未知列

时间:2014-09-11 21:03:04

标签: mysql ruby-on-rails

我在rails 3.2.18和mysql 5.6.20上工作。我创建了创建新表的迁移,它看起来像这样:

class CreateRequest < ActiveRecord::Migration
  def change
    create_table :requests, id: false do |t|
      t.string    :id,                  null: false
      t.integer   :lesson_id,           null: false
      t.integer   :user_id,             null: false
      t.boolean   :approved,            null: false, default: false
    end

    add_index :requests, :id, unique: true
  end
end

我决定用uuid作为主键。 DB I中的新记录创建如下:

def create_request(lesson)
request = Request.new.tap do |req|
  req.id = SecureRandom.uuid
  req.lesson_id = lesson.id
  req.user_id = @user.id
end
request.save
end

所以我们有Request模型,它与另外两个表Lesson(一对一)和用户(一对多)有关。不,我会告诉你所有模特。

class PublicizeRequest < ActiveRecord::Base
  self.table_name  = "requests"
  self.primary_key = "id"

  has_one     :lesson
  belongs_to  :user

end

class Lesson < ActiveRecord::Base
  (...)
  belongs_to :publicize_request
end

class User < ActiveRecord::Base
  (...)
  has_many :publicize_requests
end

现在我可以描述一下主要问题。如果我收到来自DB的请求,并且我想获得用户数据,我可以这么做:

@request.user

但如果我想以同样的方式上课,我会听到以下错误:

 Mysql2::Error: Unknown column 'lessons.request_id' in 'where clause': SELECT  `lessons`.* FROM `lessons`  WHERE `lessons`.`archived` = 0 AND `lessons`.`request_id` = 'd0da41df-a9be-4575-ada0-538abe1f54a3' LIMIT 1 

我是rails的新手,我不知道如何处理这个问题。谢谢你的所有答案。

1 个答案:

答案 0 :(得分:1)

您的迁移和关系定义不匹配。规则是,无论您使用哪个表键入外键,都可以在该表的模型上定义belongs_to关系。

您已在lesson_id表中定义了requests列,这意味着Request模型应该有belongs_to :lesson

class PublicizeRequest < ActiveRecord::Base
  ...
  belongs_to  :lesson
  ...
end

您收到错误的原因是因为您在has_one :lesson模型中有Request,这意味着如果您已定义belongs_to :request模型中的Lesson request_id ,但您的lessons表格中没有{{1}}列。