gpt4 book ai didi

ruby - DataMapper 关联中的外键名称

转载 作者:数据小太阳 更新时间:2023-10-29 08:34:55 25 4
gpt4 key购买 nike

我目前正在开发一个基于现有数据库的新应用程序,使用 DataMapper 进行数据访问。但是,它在处理外键时的约定不是数据库使用的约定。

例子:

class Invoice
include DataMapper::Resource

storage_names[:default] = 'invoices'

property :id, Serial
# ... more properties ...

has n, :items
end

class Item
include DataMapper::Resource

storage_names[:default] = 'invoiceItems'

property :id, Serial
# ... more properties ...

belongs_to :invoice # this should use 'invoiceId' instead of 'invoice_id'
end

有什么方法可以让 DataMapper 使用的外键成为“invoiceId”而不是它目前尝试使用的“invoice_id”(如上面的评论所示)?我知道这可以通过添加 :field => 'fieldName' 使用普通字段来完成,但我没有发现这种关联方式。

最佳答案

感谢 Jan De Poorter 的 very helpful blog entry,我已经不是第一次找到自己问题的答案了。 .

在处理字段名称时有必要调整约定,以便它只使用符号的名称,而不是使用关于下划线的内置智能。

repository(:default).adapter.field_naming_convention = lambda { |value| value.name.to_s }

然后可以如下指定外键名称:

class Invoice
# bla bla...
has n, :items, :child_key => [:invoiceId]
end

class Item
# bla bla...
belongs_to :invoice, :child_key => [:invoiceId]
end

值得注意的是(如上所示)需要在关系的两边指定键名(我觉得有点奇怪,但是嘿嘿)。希望这会帮助其他发现自己问同样问题的人。感谢Jan De Poorter求答案。

关于ruby - DataMapper 关联中的外键名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1987386/

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