Ale*_*hev 14 postgresql json ruby-on-rails
我在rails 4.0和postgresql 9.3上有ruby.
我有两个型号:
class Person < ActiveRecord::Base
belongs_to :address_city, :class_name =>'City', :foreign_key => "address['city_id']"
end
class City < ActiveRecord::Base
has_many: :address_cities, :class => "Person", :foreign_key => "address['city_id']"
end
Run Code Online (Sandbox Code Playgroud)
address表Person中的字段是JSON类型,并且city_id是此JSON字段中可能的键之一.
那么,我可以将两个模型之间的关联使用Person.first.address_city吗?
默认情况下,Rails使用belongs_to端的foreign_key在两个关联表之间进行SQL连接.所以它不会进入你的JSON字段,寻找foreign_key值.
你可以做的是建立一个关联扩展来查看你的json字段.您可以在rails关联指南中查看如何执行此操作:http: //guides.rubyonrails.org/association_basics.html#association-extensions
在我看来,这是针对rails约定的,你不应该这样做.相反,您可以在人员表中创建名为city_id的新列.然后你做一个迭代人员表的工作,从json中提取city_id并更新city_id列.在此之后,您可以在人员和城市表之间进行正常的1对多关联.如果我在哪里,我也会提取我可能需要的其他领域.然后,您可以在数据库中添加索引以提高速度.
更新:
在Rails 4.2和Postgres中,您可以将json内容直接放在一列中,然后您可以使用rails中的Postgres json查询语法轻松查询它.
所以我认为您可以构建可以查看json内容的Association Extension,尽管我不建议这样做因为违反了约定.
参考文献:
使用json查询whith rails模型的示例:http://robertbeene.com/rails-4-2-and-postgresql-9-4/
Active Record json数据类型:http: //edgeguides.rubyonrails.org/active_record_postgresql.html#json
Postgres json查询语法:http: //www.postgresql.org/docs/9.4/static/functions-json.html
| 归档时间: |
|
| 查看次数: |
1279 次 |
| 最近记录: |