ссылки на встроенные ресурсы mongo mongoid ruby rails
ruby 2.50
rails 5.1.4
gem 'mongoid'
gem 'mongoid_paranoia'
gem 'mongoid-tree'
gem 'mongoid-autoinc'
gem 'mongoid-userstamps'
У меня возникли проблемы с использованием встроенного ресурса.
У меня есть модель Account
.
class Account
store_in collection: 'accounts'
has_many :email_routes, dependent: :destroy
embeds_many :labels, as: :labelable
etc..
end
Как вы можете видеть, каждая учетная запись имеет много меток.
class Label
embedded_in :labelable, polymorphic: true
belongs_to :email_routes
field :text, type: String
field :color, type: String
end
Доступные метки задаются на уровне учетной записи...
И у меня есть электронная почта, к которой я хочу применить некоторые ярлыки..
class EmailRoute
belongs_to :account
field :email_address, type: String
has_many :labels, as: :labelable, dependent: :nullify
# field :labels, type: Array, default: []
end
В email_routes_controller
у меня есть простое действие обновления..
def update
selected_labels = params[:labels]
@email_route.update_attributes!(labels: selected_labels)
render json: @email_route
end
params[:labels]
содержит массив Label
объекты. Когда я подключаюсь к контроллеру, я получаю следующее сообщение об ошибке.
Есть ли какой-нибудь способ обойти это? Я знаю, что есть много статей, касающихся embedded, но ни одна из них не подходит к этому конкретному случаю. Любая помощь очень ценится, так как я не хочу терять данные этикетки и нуждаюсь в них, чтобы быть указывается на уровне счета.Ссылка на документ метки (n) из документа электронной почты через реляционную ассоциацию не допускается, так как метка встроена.
Резюме:
Чтобы правильно получить доступ к метке(n) из EmailRoute, ссылка должна пройти через корневой документ Label. В простом случае это потребовало бы от Mongoid хранить дополнительный внешний ключ для корня, в более сложных случаях там, где метка имеет глубину нескольких уровней, ключ должен храниться для каждого родителя в иерархии.Резолюция:
Подумайте о том, чтобы не встраивать метку или делать хранение ключей и доступ к ним пользовательским способом в коде приложения.): "
Спасибо!
Edit будет ли что-то подобное единственным решением? https://www.cookieshq.co.uk/posts/switching-relationships-with-mongoid
Правка 2 ... Мне удалось добраться до этой точки при вызове @account.email_routes[0].labels
из консоли rails. Строки во вложенном массиве внутри селектора - это метки, которые я хотел добавить. Однако, когда я рендерю :JSON @account.email_route, массив labels является вернулся пустой. Как я могу использовать информацию в селекторе?
#<Mongoid::Criteria
Селектор: {"_id" = > {"$in " =>["критические обновления тестов", "Chill", "New", > "Make", "Cool", "1", "2", "3"]}} опции: {} класс: этикетка встроенный: true>