Ruby on rails 在Rails v4有很多关联的情况下,您怎么能有一个计算出的主键列呢
我有一个Rails模型,它有一个hstore(使用hstore_访问器gem)。因此,当我在一个与hstore字段有许多关联的Ruby on rails 在Rails v4有很多关联的情况下,您怎么能有一个计算出的主键列呢,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我有一个Rails模型,它有一个hstore(使用hstore_访问器gem)。因此,当我在一个与hstore字段有许多关联的上设置主键时,生成的SQL只是在搜索NULL(Postgres) 那么,有没有办法定义一个自定义方法来计算关联的主键呢 如果我这样做: has_many :email_blocks, lambda { |cm| where(email_address: cm.email_address) }, foreign_key: :email_address 然后,我可以通过
上设置主键时,生成的SQL只是在搜索NULL
(Postgres)
那么,有没有办法定义一个自定义方法来计算关联的主键呢
如果我这样做:
has_many :email_blocks, lambda { |cm| where(email_address: cm.email_address) },
foreign_key: :email_address
然后,我可以通过以下SQL实现大部分目标:
SELECT "email_blocks".* FROM "email_blocks"
WHERE "email_blocks"."email_address" = '950b5f7b-9388-45f4-9c42-42e18337b09c'
AND "email_blocks"."email_address" = 'me@example.com'
但是检查关系主键的第一个子句是不必要的,因为此SQL将返回我想要的:
SELECT "email_blocks".* FROM "email_blocks"
WHERE "email_blocks"."email_address" = 'me@example.com'
最好的答案可能是——你没有。ActiveRecord是使用简单的自动索引ID或UUID作为主键和外键构建的。在ActiveRecord中使用复合或计算的PKs只会带来巨大的痛苦和痛苦,但收益非常有限。这是一个愚蠢的答案。ActiveRecord和其他任何工具一样只是一个工具,它内置了对许多类似情况的支持。例如,您可以显式设置主键
和外键
。这里不起作用的唯一原因是使用了hstore列。如果内置选项不起作用,编写自己的关系/关联就足够容易了。