#ruby-on-rails #ruby #graphql #graphql-ruby
#ruby-on-rails #ruby #graphql #graphql-ruby
Вопрос:
В rails распространенный шаблон, который я использовал, — создать новый unpersisted объект для заполнения форм значениями по умолчанию, например
class ContactsController < ApplicationController
def new
@contact = Contact.new
end
end
...
<%= form_for(@contact) %>
Я создал форму, используя graphql ruby, и я хотел бы заполнить значения по умолчанию, используя unpersisted объект
, т.Е. У меня есть форма CreateOrUpdate, заполненная contractParts
query Contract($contractId: ID!) {
contract(id: $contractId) {
...contractParts
}
}
query DefaultContract($ownerId: ID!) {
defaultContract(ownerId: $ownerId) {
...contractParts
}
}
и в моем query_types.rb
def default_contract(owner_id:)
owner = Owner.find(owner_id)
Contract.new(owner: owner)
end
Мне интересно, подходит ли этот шаблон, или из-за того, что я возвращаю объект без идентификатора, возникнут проблемы.
Я просмотрел всю документацию и ничего не могу найти по этому поводу, разве это не правильный graphql?
Ответ №1:
Конечно, вы можете это сделать. Вы можете создать «совокупность» несохраненных объектов с любыми значениями по умолчанию, которые вам нравятся:
# app/models/default_contract_aggregate.rb
class DefaultContractAggregate < Contract
def initialize
self.rel1 = DefaultRel1.new
# etc
end
end
# app/graphql/types/query_type.rb
def default_contract(owner_id:)
owner = Owner.find(owner_id)
DefaultContractAggregate.new(owner: owner)
end
Это не самая худшая идея, но, конечно, с graphql, в зависимости от вашей схемы, вероятно, можно было бы достичь границы вашего агрегата, поэтому вам нужно быть осторожным с этим. Что касается вашего другого вопроса, нет ничего плохого в использовании несохраненного объекта или объекта без идентификатора. Будьте осторожны с ассоциациями, которые автоматически сохраняются при назначении, поскольку это может привести к довольно захватывающим и неожиданным результатам.
Лично я считаю, что не требуется много сложностей, чтобы перерасти генераторы форм rails, и я предпочитаю создавать сложные пользовательские интерфейсы на интерфейсе, но если они все еще работают на вас, нет ничего плохого в том, чтобы продолжать их использовать.