Realizar operações de dados
Nesta página
- Visão geral
- Criar operações
- criar!
- criar
- save!
- Salvar
- Ler operações
- attributes
- recarregar
- Atualizar operações
- update_attributes!
- update_attributes
- update_attribute
- upsert
- toque
- Excluir operações
- excluir
- destruir
- delete_all
- Destruir_all
- Atributos de persistência
- new_record?
- persistiu?
- Acessar valores de campo
- Obter e definir valores de campo
- read_attribute e write_attribute
- Atributos de gravação em massa
- Operadores de atualização atômica
- Operações atômicas do grupo
- rastreamento sujo
- Ver alterações
- Redefinir alterações
- Persistência
- Ver alterações anteriores
- Atualizar campos de contêiner
- Documentos somente leitura
- Informações adicionais
Visão geral
Neste guia, você pode aprender como usar o Mongoid para executar operações CRUD (criar, ler, atualizar, excluir) para modificar os dados em suas coleções MongoDB .
O Mongoid oferece suporte a operações CRUD que você pode executar usando outros mapeadores Ruby, como Active Record ou Data Mapper. Ao usar o Mongoid, as operações gerais de persistência executam atualizações atômicas apenas nos campos que você altera, em vez de gravar o documento inteiro no banco de dados a cada vez, como acontece com outros ODMs.
Criar operações
Você pode executar operações de criação para adicionar novos documentos a uma coleção. Se a coleção não existir, a operação criará implicitamente a coleção. As seções a seguir descrevem os métodos que você pode usar para criar novos documentos.
criar!
Utilize o método create!
na sua classe de modelo para inserir um ou mais documentos em uma collection. Se ocorrer algum erro de servidor ou validação, create!
criará uma exceção.
Para chamar create!
, passe um hash de atributos que definem o documento que você deseja inserir. Se você deseja criar e inserir vários documentos, passe uma array de hashes.
Este exemplo mostra várias maneiras de chamar create!
. O primeiro exemplo cria um documento Person
e o segundo exemplo cria dois documentos Person
. O terceiro exemplo passa um bloco do..end
para create!
. O Mongoid invoca este bloco com os documentos passados para create!
como argumentos. O método create!
tenta salvar o documento no final do bloco:
Person.create!( first_name: "Heinrich", last_name: "Heine" ) Person.create!([ { first_name: "Heinrich", last_name: "Heine" }, { first_name: "Willy", last_name: "Brandt" } ]) Person.create!(first_name: "Heinrich") do |doc| doc.last_name = "Heine" end
criar
Use o método create
para inserir um novo documento ou vários novos documentos em um banco de dados. create
não gera uma exceção em erros de validação, ao contrário da versão !
com sufixo. create
gera exceções em erros do servidor , como se você inserir um documento com um campo _id
duplicado.
Se create
encontrar algum erro de validação, o documento não será inserido, mas retornado com outros documentos que foram inseridos. Você pode usar os métodos persisted?
, new_record?
ou errors
para verificar os documentos inseridos no banco de dados.
Este exemplo mostra como usar o create
para inserir novos documentos no MongoDB. O primeiro exemplo mostra como inserir um documento Person
. O segundo exemplo tenta inserir dois documentos Post
, mas o segundo documento falha na validação porque contém um título duplicado. Em seguida, o exemplo usa o método persisted?
para confirmar quais documentos foram inseridos com sucesso na coleção:
Person.create( first_name: "Heinrich", last_name: "Heine" ) class Post include Mongoid::Document validates_uniqueness_of :title end posts = Post.create([{title: "test"}, {title: "test"}]) posts.map { |post| post.persisted? } # => [true, false]
Para saber mais sobre os persisted?
new_record?
métodos e, consulte a seção Atributos de persistência deste guia.
save!
Use o método save!
para salvar atomicamente atributos alterados na coleção ou inserir um novo documento. save!
gera uma exceção se houver algum erro de servidor ou validação. Você pode usar o método new
para criar uma nova instância de documento . Em seguida, use save!
para inserir o documento no banco de dados.
O exemplo a seguir mostra como usar save!
para inserir um novo documento Person
e atualizar o campo first_name
do documento existente:
person = Person.new( first_name: "Esmeralda", last_name: "Qemal" ) person.save! person.first_name = "Malik" person.save!
Salvar
O método save
não gera uma exceção se houver algum erro de validação. save
ainda gera uma exceção se houver algum erro no servidor . O método retorna true
se todos os atributos alterados forem salvos e false
se ocorrer algum erro de validação.
Você pode passar as seguintes opções para save
:
validate: false
: Para ignorar validações ao salvar o novo documento ou atributos atualizados.touch: false
: Para não atualizar o campoupdated_at
ao atualizar os atributos especificados. Esta opção não tem efeito ao inserir um novo documento.
O código a seguir usa save
para inserir um novo documento. Em seguida, ele atualiza esse documento e aplica a opção validate: false
.
person = Person.new( first_name: "Tamara", last_name: "Graham" ) person.save person.first_name = "Aubrey" person.save(validate: false)
Ler operações
Você pode realizar operações de leitura para recuperar documentos de uma collection. Para saber mais sobre como criar filtros de query para recuperar um subconjunto dos seus documentos, consulte o guia Especificar uma query.
attributes
Você pode utilizar o método attributes
para recuperar os atributos de uma instância de modelo como um hash. Esse hash também contém os atributos de todos os documentos incorporados.
O seguinte exemplo mostra como utilizar o attributes
:
person = Person.new(first_name: "James", last_name: "Nan") person.save puts person.attributes
{ "_id" => BSON::ObjectId('...'), "first_name" => "James", "last_name" => "Nan" }
recarregar
Você pode usar o método reload
para acessar a versão mais recente de um documento do MongoDB. Quando você recarrega um documento, o Mongoid também recarrega quaisquer associações incorporadas na mesma query. No entanto, o Mongoid não recarrega associações referenciadas. Em vez disso, ele limpa esses valores para que sejam carregados do banco de dados durante o próximo acesso.
Quando você chama reload
em um documento, todas as alterações não salvas no documento são perdidas. O código a seguir mostra como chamar reload
em um documento:
band = Band.create!(name: 'Sun 1') # => #<Band _id: ..., name: "Sun 1"> band.name = 'Moon 2' # => #<Band _id: ..., name: "Moon 2"> band.reload # => #<Band _id: ..., name: "Sun 1">
O exemplo anterior atualiza o campo name
no documento band
, mas não salva o novo valor. Como o Mongoid não persistiu a alteração no valor name
, name
contém o valor original salvo no banco de dados.
Observação
Erros de documento não encontrado
Quando o Mongoid não consegue encontrar um documento no banco de dados, por padrão, ele gera um erro Mongoid::Errors::DocumentNotFound
. Você pode definir a opção de configuração raise_not_found_error
como false
em seu arquivo mongoid.yml
para direcionar o Mongoid a salvar um novo documento e definir seus atributos para valores padrão. Geralmente, também altera o valor do campo _id
. Por esse motivo, não recomendamos o uso de reload
quando raise_not_found_error
estiver definido como false
.
Recarregar documentos não salvos
Quando você chama reload
em um documento que não é persistente, o método executa uma query find
no valor _id
do documento.
O exemplo a seguir chama reload
em um documento que não foi salvo e imprime o valor de campo name
. reload
executa uma operação find
usando o valor _id
do documento, o que faz com que o Mongoid recupere o documento existente na coleção:
existing = Band.create!(name: 'Photek') band = Band.new(id: existing.id) band.reload puts band.name
Photek
Atualizar operações
Você pode executar operações de atualização para modificar documentos existentes em uma collection. Se você tentar atualizar um documento excluído, o Mongoid gerará uma exceção de FrozenError
.
update_attributes!
Você pode utilizar o método update_attributes!
para atualizar os atributos de uma instância do modelo existente. Este método gera uma exceção se encontrar algum erro de validação ou servidor .
O exemplo a seguir mostra como usar update_attributes!
para atualizar os atributos first_name
e last_name
de um documento existente:
person.update_attributes!( first_name: "Maximilian", last_name: "Hjalmar" )
Dica
O Mongoid fornece o recurso de atributos aninhados que permite atualizar um documento e suas associações aninhadas em uma chamada. Para saber mais, consulte o guia Atributos aninhados.
update_attributes
O método update_attributes
não gera uma exceção em erros de validação. O método retorna true
se passar na validação e o documento for atualizado e false
caso contrário.
O seguinte exemplo mostra como utilizar o update_attributes
:
person.update_attributes( first_name: "Hasan", last_name: "Emine" )
update_attribute
Você pode utilizar o update_attribute
método para ignorar validações e atualizar um único atributo de uma instância do modelo.
O exemplo a seguir mostra como usar update_attribute
para atualizar o valor do atributo first_name
de um documento:
person.update_attribute(:first_name, "Jean")
upsert
Você pode usar o método upsert
para atualizar, inserir ou substituir um documento.
upsert
aceita uma opção replace
. Se você definir essa opção como true
e o documento que chama upsert
já existir no banco de dados, o novo documento substituirá o documento no banco de dados. Todos os campos no banco de dados que o novo documento não substitui são removidos.
Se você definir a opção replace
como false
e o documento existir no banco de dados, ele será atualizado. O Mongoid não altera nenhum campo além dos especificados no documento de atualização . Se o documento não existir no banco de dados, ele será inserido com os campos e valores especificados no documento de atualização. A opção replace
é definida como false
por padrão.
O exemplo a seguir mostra como usar upsert
para primeiro inserir um novo documento e, em seguida, substituí-lo definindo replace: true
:
person = Person.new( first_name: "Balu", last_name: "Rama" ) person.upsert person.first_name = "Ananda" person.upsert(replace: true)
toque
Você pode usar o método touch
para atualizar o carimbo de data/hora updated_at
de um documento para a hora atual. touch
propaga a atualização para qualquer uma das associações belongs_to
do documento. Você também pode passar outro campo com valor de tempo como uma opção para também atualizar esse campo.
O exemplo a seguir usa touch
para atualizar os registros de data e hora updated_at
e audited_at
:
person.touch(:audited_at)
Excluir operações
Você pode executar operações de exclusão para remover documentos de uma coleção.
excluir
Você pode usar o método delete
para excluir um documento do banco de dados. Quando você usa delete
, o Mongoid não executa nenhum retorno de chamada. Se o documento não for salvo no banco de dados, delete
tentará excluir qualquer documento com o mesmo valor de _id
.
O exemplo a seguir mostra como usar o método delete
e demonstra o que acontece quando você exclui um documento que não é salvo no banco de dados:
person = Person.create!(name: 'Edna Park') unsaved_person = Person.new(id: person.id) unsaved_person.delete person.reload
No exemplo anterior, o Mongoid gera um erro Mongoid::Errors::DocumentNotFound
quando você chama reload
porque unsaved_person.delete
exclui o documento person
porque os dois documentos têm o mesmo valor para _id
.
destruir
O método destroy
opera de forma semelhante a delete
, exceto pelo Mongoid que executa chamadas de resposta quando você chama destroy
. Se o documento não for encontrado no banco de dados, destroy
tentará excluir qualquer documento com o mesmo _id
.
O seguinte exemplo mostra como utilizar o destroy
:
person.destroy
delete_all
O método delete_all
exclui todos os documentos da collection que são modelados por sua classe de modelo Mongoid. delete_all
não executa retornos de chamada.
O exemplo a seguir mostra como usar o delete_all
para excluir todos os documentos do Person
:
Person.delete_all
Destruir_all
O método destroy_all
exclui todos os documentos da collection que são modelados por sua classe de modelo Mongoid. Esta pode ser uma operação cara porque o Mongoid carrega todos os documentos na memória.
O exemplo a seguir mostra como usar o destroy_all
para excluir todos os documentos do Person
:
Person.destroy_all
Atributos de persistência
As seções a seguir descrevem os atributos que o Mongoid fornece que você pode usar para verificar se um documento persiste no banco de dados.
new_record?
O new_record?
atributo retorna true
se a instância do modelo ainda não tiver sido salva no banco de dados e false
caso contrário. Ele verifica a condição oposta como o persisted?
atributo.
O seguinte exemplo mostra como utilizar o new_record?
:
person = Person.new( first_name: "Tunde", last_name: "Adebayo" ) puts person.new_record? person.save! puts person.new_record?
true false
persistiu?
O atributo persisted?
retorna true
se Mongoid persistir a instância do modelo e false
caso contrário. Ele verifica a condição oposta como o atributo new_record?
.
O seguinte exemplo mostra como utilizar o persisted?
:
person = Person.new( first_name: "Kiana", last_name: "Kahananui" ) puts person.persisted? person.save! puts person.persisted?
false true
Acessar valores de campo
O Mongoid fornece várias maneiras de acessar valores de campo em um documento. As seções a seguir descrevem como você pode acessar os valores de campo .
Obter e definir valores de campo
Existem várias maneiras de obter e definir valores de campo em um documento. Se você declarar explicitamente um campo, poderá obter e definir o valor desse campo diretamente no documento . O exemplo seguinte mostra como configurar e obter o campo first_name
para uma instância do Person
:
class Person include Mongoid::Document field :first_name end person = Person.new person.first_name = "Artem" person.first_name # => "Artem"
O exemplo anterior primeiro usa o atributo first_name
para definir um valor e, em seguida, o chama novamente para recuperar o valor.
Você também pode usar os métodos []
e [] =
em uma instância de modelo do Mongoid para acessar atributos usando a sintaxe de hash. O método []
é um alias para o método read_attribute
e o método [] =
é um alias para o método write_attribute
. O exemplo a seguir mostra como obter e definir o campo first_name
com nome alternativo usando os métodos []
e []=
:
class Person include Mongoid::Document field :first_name, as: :fn end person = Person.new(first_name: "Artem") person["fn"] # => "Artem" person[:first_name] = "Vanya" # => "Artem" person # => #<Person _id: ..., first_name(fn): "Vanya">
Para saber mais sobre esses métodos, consulte a seguinte seção read_attribute e write_attribute deste guia.
read_attribute e write_attribute
Você pode utilizar os métodos read_attribute
e write_attribute
para especificar o comportamento personalizado ao ler ou gravar campos. Você pode usar esses métodos ao definir um modelo ou chamando-os em instâncias de modelo.
Para utilizar o read_attribute
para obter um campo, passe o nome do campo para o método. Para usar write_attribute
para definir um campo, passe o nome do campo e o valor a ser atribuído.
O exemplo seguinte utiliza read_attribute
e write_attribute
em uma definição de modelo para definir first_name
e first_name=
como métodos que são utilizados para ler e escrever no atributo fn
:
class Person include Mongoid::Document def first_name read_attribute(:fn) end def first_name=(value) write_attribute(:fn, value) end end person = Person.new person.first_name = "Artem" person.first_name # => "Artem"
Você também pode chamar read_attribute
e write_attribute
diretamente em uma instância de modelo para obter e definir atributos. O exemplo seguinte utiliza estes métodos em uma instância de modelo para obter o atributo first_name
e defini-lo para o valor "Pushkin"
.
class Person include Mongoid::Document field :first_name, as: :fn end person = Person.new(first_name: "Artem") # => #<Person _id: ..., first_name(fn): "Artem"> person.read_attribute(:first_name) # => "Artem" person.read_attribute(:fn) # => "Artem" person.write_attribute(:first_name, "Pushkin") person # => #<Person _id: ..., first_name(fn): "Pushkin">
Atributos de gravação em massa
Você pode escrever em vários campos ao mesmo tempo usando os métodos attributes=
ou write_attributes
em uma instância do modelo.
Para utilizar o método attributes=
, chame o método em uma instância de modelo e passe um objeto de hash que contenha os campos e valores que você deseja definir. O exemplo a seguir mostra como usar o método attributes=
para definir os campos first_name
e middle_name
em um documento person
:
person.attributes = { first_name: "Jean-Baptiste", middle_name: "Emmanuel" }
Para utilizar o método write_attributes
, chame o método em uma instância do modelo e passe os campos e valores que você deseja definir. O exemplo a seguir mostra como usar o método write_attributes
para definir os campos first_name
e middle_name
em um documento person
:
person.write_attributes( first_name: "Jean-Baptiste", middle_name: "Emmanuel", )
Operadores de atualização atômica
O Mongoid oferece suporte para os seguintes operadores de atualização que você pode chamar como métodos em instâncias do modelo. Esses métodos executam operações atomicamente e ignoram validações e retornos de chamada.
A tabela a seguir descreve os operadores suportados pelo Mongoid:
Operador | Descrição | Exemplo | |||
---|---|---|---|---|---|
| Adiciona um valor especificado a um campo com valor de array . |
| |||
| Executa uma atualização bitwise de um campo. |
| |||
| Aumenta o valor de um campo. |
| |||
| Remove o primeiro ou último elemento de um campo de array . |
| |||
| Remove todas as instâncias de um valor ou valores que correspondem a uma condição especificada de um campo de array . |
| |||
| Remove todas as instâncias dos valores especificados de um campo de array . |
| |||
| Anexa um valor especificado a um campo de array . |
| |||
| Renomeia um campo em todos os documentos correspondentes. |
| |||
| Updates an attribute on the model instance and, if the instance
is already persisted, performs an atomic $set on the field, bypassing
validations.set can also deeply set values on Hash fields.set can also deeply set values on embeds_one associations.
If a model instance's embeds_one association document is nil , one
is created before the update.set cannot be used with has_one associations. |
| |||
| Exclui um campo específico em todos os documentos correspondentes. |
|
Para saber mais sobre operadores de atualização, consulte Operadores de atualização no manual do MongoDB Server .
Operações atômicas do grupo
Para agrupar operações atômicas, você pode usar o método atomically
em uma instância de modelo. O Mongoid envia todas as operações que você passa para um bloco atomically
em um único comando atômico.
Observação
Use transações para modificar vários documentos atomicamente
Operações atômicas se aplicam a um documento de cada vez. Portanto, os atomically
blocos aninhados não podem fazer alterações em vários documentos em uma operação atômica. Para fazer alterações em vários documentos em uma operação atômica, use uma transação de vários documentos. Para saber mais sobre transações, consulte o guia Transações e Sessões.
O exemplo a seguir mostra como usar o atomically
para atualizar atomicamente vários campos em um documento:
person.atomically do person.inc(age: 1) person.set(name: 'Jake') end
Você pode aninhar #atomically
blocos ao atualizar um único documento. Por padrão, o Mongoid realiza gravações atômicas definidas por cada bloco quando o bloco termina. O exemplo a seguir mostra como aninhar atomically
blocos:
person.atomically do person.atomically do person.inc(age: 1) person.set(name: 'Jake') end raise 'An exception' # Name and age changes are persisted end
No exemplo anterior, as operações $inc
e $set
são executadas no final do bloco atomically
interno.
Unir contextos
O método atomically
aceita uma opção join_context: true
para especificar que as operações são executadas no final do bloco atomically
mais externo. Quando você habilita esta opção, somente o bloco mais externo ou o primeiro bloco em que join_context
está false
grava as alterações no banco de dados. O exemplo seguinte define a opção join_context
para true
:
person.atomically do person.atomically(join_context: true) do person.inc(age: 1) person.set(name: 'Jake') end raise 'An exception' # Name and age changes are not persisted end
No exemplo anterior, o Mongoid executa as operações $inc
e $set
no final do bloco atomically
mais externo. No entanto, como uma exceção é gerada antes do término do bloco e essas operações podem ser executadas, as alterações não são persistentes.
Você também pode habilitar a união de contexto globalmente, para que as operações sejam executadas no atomically
bloco mais externo por padrão. Para habilitar esta opção globalmente, defina a join_contexts
opção de configuração do para true
no seu mongoid.yml
arquivo. Para saber mais sobre as opções de configuração do Mongoid, consulte Opções de arquivo de configuração autogerenciadas.
Ao definir globalmente join_contexts
true
como, você pode usar a join_context: false
opção em um atomically
bloco para executar operações no final do bloco apenas para esse bloco.
rastreamento sujo
Você pode rastrear campos alterados ("sujos") usando uma API Mongoid semelhante à disponível no Active Model. Se você modificar um campo definido em um modelo, o Mongoid marcará o modelo como sujo e permitirá que você execute ações especiais. As seções a seguir descrevem como você pode interagir com modelos sujos.
Ver alterações
O Mongoid registra as alterações desde o momento em que um modelo é instanciado, seja como um novo documento ou recuperando um do banco de dados, até o momento em que ele é salvo. Qualquer operação de persistência limpa as alterações.
A Mongoid cria métodos específicos do modelo que permitem explorar as alterações em uma instância do modelo. O código a seguir demonstra maneiras de visualizar as alterações na instância do modelo:
# Retrieves a person instance person = Person.first # Sets a new `name` value person.name = "Sarah Frank" # Checks to see if the document is changed person.changed? # true # Gets an array of changed fields. person.changed # [ :name ] # Gets a hash of the old and changed values for each field person.changes # { "name" => [ "Sarah Frink", "Sarah Frank" ] } # Checks if a specific field is changed person.name_changed? # true # Gets the changes for a specific field person.name_change # [ "Sarah Frink", "Sarah Frank" ] # Gets the previous value for a field person.name_was # "Sarah Frink"
Observação
Monitoramento de alterações em associações
Definir as associações em um documento não modifica os hashes changes
ou changed_attributes
. Isto é verdade para todos os tipos de associações. No entanto, alterar o campo _id
em associações referenciadas faz com que as alterações apareçam nos hashes changes
e changed_attributes
.
Redefinir alterações
Você pode redefinir um campo alterado para seu valor anterior ligando para o método reset
, como mostrado no seguinte código:
person = Person.first person.name = "Sarah Frank" # Reset the changed `name` field person.reset_name! person.name # "Sarah Frink"
Persistência
O Mongoid usa o rastreamento sujo como base de todas as operações de persistência. Ele avalia as alterações em um documento e atualiza atomicamente apenas o que foi alterado, em comparação com outras estruturas que gravam o documento inteiro em cada salvamento. Se você não fizer nenhuma alteração, o Mongoid não acessará o banco de dados quando você chamar Model#save
.
Ver alterações anteriores
Depois de persistir um modelo no MongoDB, o Mongoid limpa as alterações atuais. No entanto, você ainda pode ver quais alterações foram feitas anteriormente chamando o método previous_changes
, como mostrado no seguinte código:
person = Person.first person.name = "Sarah Frank" person.save # Clears out current changes # Lists the previous changes person.previous_changes # { "name" => [ "Sarah Frink", "Sarah Frank" ] }
Atualizar campos de contêiner
Atualmente, o Mongoid tem um problema que impede que as alterações nos atributos dos tipos de contêiner, como Set
ou Array
, sejam salvos no MongoDB. Você deve atribuir todos os campos, incluindo tipos de contêiner, para que seus valores sejam salvos no MongoDB.
Por exemplo, adicionar um item a uma Set
instância do como mostrado no seguinte código não persiste alterações no MongoDB:
person = Person.new person.interests # => #<Set: {}> person.interests << 'Hiking' # => #<Set: {"Hiking"}> person.interests # => #<Set: {}> # Change does not take effect
Para manter essa alteração, você deve modificar o valor do campo fora do modelo e atribuí-lo de volta ao modelo, conforme mostrado no código a seguir:
person = Person.new interests = person.interests # => #<Set: {}> interests << 'Hiking' # => #<Set: {"Hiking"}> # Assigns the Set to the field person.interests = interests # => #<Set: {"Hiking"}> person.interests # => #<Set: {"Hiking"}>
Documentos somente leitura
Você pode marcar documentos como somente leitura das seguintes maneiras, dependendo do valor do sinalizador de feição Mongoid.legacy_readonly
:
Se esse sinalizador estiver desativado, você poderá marcar um documento como somente leitura ligando para o
readonly!
método nesse documento. O documento somente leitura resultante gera umReadonlyDocument
erro se você tentar executar qualquer operação persistente, incluindo, mas não limitado a, salvar, atualizar, excluir e destruir. Observe que o recarregamento não redefine o estado somente leitura.person = Person.first person.readonly? # => false person.readonly! # Sets the document as read-only person.readonly? # => true person.name = "Larissa Shay" # Changes the document person.save # => raises ReadonlyDocument error person.reload.readonly? # => true Se esse sinalizador
on
estiver, você poderá marcar um documento como somente leitura depois de projeto esse documento usando métodos comoonly
without
ou. Como resultado, você não pode excluir ou destruir o documento somente leitura porque o Mongoid gera umReadonlyDocument
erro, mas você pode salvá-lo e atualizá-lo. O status somente leitura será redefinido se você recarregar o documento.person = Person.only(:name).first person.readonly? # => true person.destroy # => raises ReadonlyDocument error person.reload.readonly? # => false Dica
Projeção
Para saber mais sobre projeções, consulte a seção Retornar campos especificados do guia Modificar resultados da query.
Você também pode tornar um documento somente leitura substituindo o método readonly?
, como mostrado no seguinte código:
class Person include Mongoid::Document field :name, type: String def readonly? true end end person = Person.first person.readonly? # => true person.destroy # => raises ReadonlyDocument error
Informações adicionais
Para saber mais sobre como especificar filtros de query, consulte o guia Especificar uma query.
Para saber mais sobre como definir regras de validação em seus modelos, consulte o guia Validação de documentos.
Para saber mais sobre como definir chamadas de resposta, consulte o guia de chamadas de resposta.