我在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的新手,我不知道如何处理这个问题。谢谢你的所有答案。
答案 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}}列。