markdown Incluirvalidaçõesnos模型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了markdown Incluirvalidaçõesnos模型相关的知识,希望对你有一定的参考价值。
## Incluindo validações nos Models ##
### Exemplo 1 ###
Quando o modelo possui uma relação já criada "references: model", para dizer ao rails que a relação
poderá conter vários registros, no modelo incluímos a seguinte linha:
```ruby
class Category < ApplicationRecord
has_many :series, class_name: "Serie"
end
```
No caso, dizemos que na tabela Category poderão existir várias séries relacionadas à ela. Obs: o trecho "class_name" não é obrigatório, foi adicionado neste caso pois não existe "Series"
no plural no rails, portanto, deve-se informar dessa maneira.
Para adicionar a validação de fato, basta adiciona a linha abaixo:
```ruby
class Category < ApplicationRecord
validates: name, presence: true, uniqueness: true
end
```
```text
validates: name (Informa que o campo nome terá uma validação).
presence: true (Verifica se o campo nome está presente, não é nulo).
uniqueness: true (Informa que o campo nome deverá ser único, ou seja, não poder haver outro registro com mesmo nome no banco de dados).
```
------------------
### Exemplo 2 ###
```ruby
class Serie < ApplicationRecord
include PgSearch
multisearchable against: [:title]
belongs_to :category
has_many :reviews, as: :reviewable
has_many :episodes, ->{ order(:episode number) }, class_name: "Movie", dependent: :destroy
belongs_to :last_watched_episode, class_name: "Movie", optional: true
validates :title, presence: true
validates :description, presence: true
validates :thumbnail key, presence: true
end
```
```text
include PgSearch
multisearchable against: [:title]
```
Essas duas linhas são referentes à gem de pesquisa que foi instalada anteriormente, basicamente diz
que o modelo utilizará do método de busca mais avançado.
```text
dependent: :destroy
```
Essa linha informa que, caso uma série seja excluída, todos os episódios da mesma também serão, ou
seja, é uma forma de exclusão em "cascata".
------------------
### Exemplo 3 ###
```ruby
class Movie < ApplicationRecord
include PgSearch
multisearchable against: [:title], if: lambda{ |record| record.serie.nil? }
has_one :watched_serie, class_name: "Serie", foreign_key: "last watched episode id", dependent: nullify
validates :episode_number, presence: true, uniqueness: { scope: :serie_id }, if: ->{ serie.present? }
validates :category, presence: true, if: ->{ serie.nil? }
validate :highlight_episode
private
def highlight_episode
if self.serie.present? && self.highlighted == true
errors.add(:highlight_episode, "It's not possible to highlight an serie episode")
end
end
end
```
Observações:
```ruby
multisearchable against: [:title], if: lambda{ |record| record.serie.nil? }
```
Na linha acima, existe uma condição "if" para a busca... os resultados poderão ser somente de um filme
solto ou de uma série, a busca não deverá trazer episódios soltos de séries como resultado da busca.
```ruby
validates :episode_number, presence: true, uniqueness: { scope: :serie_id }, if: ->{ serie.present? }
```
Essa linha também contém uma condição "if" que, verifica se o "movie" pertence à uma série, ou seja,
se é um episódio de uma série, e caso seja, faz toda a validação necessária.
```ruby
validate :highlight_episode
private
def highlight_episode
if self.serie.present? && self.highlighted == true
errors.add(:highlight_episode, "It's not possible to highlight an serie episode")
end
end
```
No código acima, existe um método um pouco mais complexo para um tipo de validação específico, e
acima é chamado esse método de validação "validate :highlight_episode".
------------------
### Exemplo 4 ###
```ruby
class Player < ApplicationRecord
belongs_to :movie
belongs_to :user
before_create :set start_date
private
def set_start_date
self.start_date ||= Time.zone.now
end
end
```
Observações:
```ruby
before_create :set_start_date
private
def set_start_date
self.start_date ||= Time.zone.now
end
```
No código acima, toda vez, antes de criar um record/player/registro no banco "before_create" é
chamado um método/função "set_start_date" para adicionar automaticamente a hora atual no campo
start_date da tabela.
以上是关于markdown Incluirvalidaçõesnos模型的主要内容,如果未能解决你的问题,请参考以下文章