मैं :segemnted_data
माणिक
class ProjectKeyword < ApplicationRecord
belongs_to :project
belongs_to :keyword
has_many :project_keyword_dimensions
has_many :dimensions, through: :project_keyword_dimensions
validates :project_id, :keyword_id, presence: true
end
प्रवासन
class AddSegemtnedDataToProjectKeywords < ActiveRecord::Migration[5.0]
def change
add_column :project_keywords, :segmented_data, :jsonb, default: '{}'
add_index :project_keywords, :segmented_data, using: :gin
end
end
मेरे समस्या है जब मैं डिफ़ॉल्ट नई project_keyword
उदाहरण बनाने को एक मॉडल ProjectKeyword जहाँ मैं कॉलम में jsonb डेटाप्रकार का उपयोग करें segmented_data
का मान एक हैश नहीं है और मैं इस फ़ील्ड को अपडेट नहीं कर सकता या किसी अन्य हैश के साथ विलय नहीं कर सकता उदाहरण के लिए
[12] pry(#)> new_pr_keyword = ProjectKeyword.new(project_id: 1671333, keyword_id: 39155)
=> #<ProjectKeyword:0x007fd997641090 id: nil, project_id: 1671333, keyword_id: 39155, segmented_data: "{}">
[13] pry(#)> new_pr_keyword.save!
=> true
[14] pry(#)> new_pr_keyword.segmented_data.update({'new_data' => 'some_data'})
NoMethodError: undefined method `update' for "{}":String
from (pry):14:in `block (3 levels) in <top (required)>'
लेकिन जब मैं hash
फ़ील्ड segmented_data
को अद्यतन करने से पहले update
विधि ठीक काम करता है।
उदाहरण
[15] pry(#)> new_pr_keyword.segmented_data = {'new_data' => 'some_data'}
=> {"new_data"=>"some_data"}
[16] pry(#)> new_pr_keyword.save!
=> true
[17] pry(#)> new_pr_keyword.segmented_data.update({'new_data_2' => 'some_data_2'})
=> {"new_data"=>"some_data", "new_data_2"=>"some_data_2"}
[18] pry(#)> new_pr_keyword.save!
=> true
के लिए सवाल यह है कि इतने विधि अद्यतन तो सीधे इस क्षेत्र पर दूर काम करेंगे एक हैश वर्ग नहीं एक स्ट्रिंग हो सकता है, वस्तु के बाद सिर्फ बनाया गया था segmented_data का डिफ़ॉल्ट मान बनाने के लिए है।
क्या आपने यह http://stackoverflow.com/a/20746242/3884750 आजमाया है? –
हाँ, मैंने कोशिश की है, यह काम नहीं करता है –