在Rails 4 / postgresql 9.4

时间:2015-05-18 20:07:37

标签: ruby-on-rails json postgresql ruby-on-rails-4 rails-postgresql

我希望在我的User表上添加一个jsonb列(称为per_deal_numbers)并准备迁移

class AddInfoToUsers < ActiveRecord::Migration
  def change
    add_column :users, :per_deal_numbers, :jsonb, default: '{??????}'

  end
end

例如对于已经完成大量交易的用户来说,这将是这样的:

user=(
id:1,
name:Eric,
age: 24,
per_deal_numbers: {
  deal1 : {"nb_of_shots"=>20, "nb_of_lost_guesses"=> 6 },
  deal10: {"nb_of_shots"=>13, "nb_of_lost_guessess"=> 4 },
  deal5: {"nb_of_shots"=>54, "nb_of_lost_guesses"=> 9 }
}

我想要的是在我的迁移中告诉:每当你为用户刚刚参与的交易申请新条目时,将nb_of_shots和nb_of_lost_guesses值等于0

我应该在迁移中或以后在我的rails app逻辑方法中提供upsert吗?

1 个答案:

答案 0 :(得分:0)

我知道这是一个较老的问题,但也许答案可以帮助更多人。 对象键必须用引号写。

以下是一个例子:

class CreateSettings < ActiveRecord::Migration
 def change
  create_table :settings do |t|
    t.jsonb :price_calculator, null: false, default: '{"formula": {"main_factor": 8, "city_factor": 7} }'
    t.timestamps null: false
  end
 end
end