因此,我通常知道,belongs_to
基于id
列将模型关联在一起,但是在我的情况下,我想通过token
列将其关联。
例如:
#app/models/user.rb
class User < ApplicationRecord
has_many :test_results
end
和
#app/models/test_result.rb
class TestResult < ApplicationRecord
belongs_to :user
end
User
模型有一个名为token
的列,因此当我在TestResult
中创建一个新条目时,该条目与{{1 }},我希望将token
与该User
关联。
我以模型形式尝试过:
TestResult
但是当我创建一个新的测试结果时,我可以看到ActiveRecord仍在寻找匹配的User
字段,而不是#app/models/test_result.rb
class TestResult < ApplicationRecord
belongs_to :user, foreign_key: "token"
end
。
id
这是我的迁移文件的样子:
token
和
2.5.1 :001 > TestResult.create(token: "Hello")
(6.2ms) SET NAMES utf8, @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'), @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
(0.2ms) BEGIN
User Load (0.3ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 0 LIMIT 1
(0.2ms) ROLLBACK
=> #<TestResult id: nil, token: "Hello", created_at: nil, updated_at: nil>
我知道我使用的是class TestResults < ActiveRecord::Migration[5.1]
def change
create_table :test_results do |t|
t.string :token
t.timestamps
end
end
end
,但是我不确定如何使用。
答案 0 :(得分:1)
不确定这是否是最好的解决方案,但在我的案例中,仅将primary_key
函数添加到TestResult
模型中即可。
#app/models/test_result.rb
class TestResult < ApplicationRecord
belongs_to :user, foreign_key: "token", primary_key: "token"
end