У меня есть столбец jsonb со значением по умолчанию {}, добавлен ключ "home_page":"1" (update_attribute и сохранить ...).
Я добавил в модель прицел -
scope :home_page, -> { where("my_column ->> 'home_page' = ?", "1") }
независимо от того, что я делаю, я всегда получаю пустой результат.
помощь :(
рельсы - 5.2.2, рубин - 2,5, db - PostgreSQL 10.3
add_column :my_table, :my_column, :jsonb, default: {} - это неправильно?
Нет, правильно.
так что тут не так?!?! не могу понять ...





Ваш объем работает.
class Thing < ApplicationRecord
scope :home_page, -> { where("my_column ->> 'home_page' = ?", "1") }
end
Как показано в этой проходящей спецификации:
require 'rails_helper'
RSpec.describe Thing, type: :model do
after(:each) { Thing.destroy_all }
describe '.home_page' do
it "includes records with home_page: 1" do
thing = Thing.create(my_column: { home_page: 1 })
expect(Thing.home_page).to include thing
end
it "includes records with home_page: '1'" do
thing = Thing.create(my_column: { home_page: '1' })
expect(Thing.home_page).to include thing
end
it "does not return records that do not match the criteria" do
Thing.create(my_column: { home_page: 0 })
Thing.create(my_column: { xhome_page: 1 })
expect(Thing.home_page).to be_empty
end
end
end
Скорее ошибка в вашей методологии тестирования или настройке. Например, вы можете попробовать вызвать в .save!, чтобы узнать, есть ли ошибки проверки.
Привет, осциллограф действительно работает, проблема в том, что он всегда возвращает пустой результат.
Тогда у вас нет записей, соответствующих области
Вы уверены, что действительно правильно установили значение по умолчанию для
t.jsonb :my_column, default: -> { "'{}'::jsonb" }? И что вы не испортили пример каким-то другим образом? Я попытался воспроизвести проблему и получил ожидаемые результаты.