gpt4 book ai didi

ruby-on-rails - 如何阻止 Rails 为没有 ID 的连接表调用 next_seq?

转载 作者:太空宇宙 更新时间:2023-11-03 16:28:31 25 4
gpt4 key购买 nike

我正在使用 Rails 3.2.13 和 fb-adapter(firebird,但我认为这与此处无关)。

我有一个连接模型,其他两个模型使用“has_many A,通过:X”。

我创建的表没有“id”(根据 Rails 指南和常识,因为 pk 是两者的组合),如下所示:

create table "X", id: false do |t|
t.integer "a_id", null: false
t.integer "b_id", null: false
end

然后,当我尝试创建一个模型时,我得到了“ActiveRecord::UnknownPrimaryKey”;好吧,我已经用谷歌搜索了,我找到了Why do I get an Unknown Primary Key exception for a join table in Rails 4?

所以在我设置的连接模型中:

class X < ActiveRecord::Base
self.primary_key = [:a_id, :b_id]
...
end

现在我可以创建一个新模型,但是当我尝试保存它时,我遇到了“Fb::Error: Invalid tokengenerator X_SEQ is not defined”,所以基本上 Rails 正在尝试获取 id 的下一个值,但是因为列没有创建生成器或序列。

这里是activerecord/relation.rb中的相关代码:

def insert(values)
primary_key_value = nil

if primary_key && Hash === values
primary_key_value = values[values.keys.find { |k|
k.name == primary_key
}]

if !primary_key_value && connection.prefetch_primary_key?(klass.table_name)
### exception get's raised here in next_sequence_value ###
primary_key_value = connection.next_sequence_value(klass.sequence_name)
values[klass.arel_table[klass.primary_key]] = primary_key_value
end
end

...
end

我不知道 sqlite3/mysql/postegres 适配器是否也会发生这种情况,但我相信如果 PK 是复合 rails ,则不应尝试获取“它的下一个值”..或者必须有一些防止它试图获得下一个值的方法.. 有什么想法可以解决这个问题(不修补 activerecord)?谢谢

最佳答案

对于纯多对多关系,使用 has_and_belongs_to_many模型中的关系。您的连接表不需要模型。使用 has_many :through 连接表中需要额外数据(例如排序顺序或时间戳)的关系。在这种情况下,成熟的模型将是合适的,并且模型需要一个主键。

关于ruby-on-rails - 如何阻止 Rails 为没有 ID 的连接表调用 next_seq?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20110973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com