Как я могу проверить некоторые атрибуты?

Как я могу проверить, есть ли у параметров «имя» и «раздел»? например: я хочу проверить «имя», но если его нет, я должен вернуть 400, то же самое с «разделом»

 context 'validation' do
        let!(:params) do
          { article: {
            name: 'a1',
            section: 'A'
            ...
            color: 'red'
          } }
        end

я не знаю, как я могу сравнить

it 'test, not allow empty name' do
   expect(name eq '').to have_http_status(400)
end
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
85
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хотя вы можете проверить параметры напрямую:

def create
  if params[:article][:name].blank? || params[:article][:section].blank? 
     return head 400
  end 
 
  # ...
end

Rails выполняет валидацию через модели:

class Article < ApplicationRecord
  validates :name, :section, presence: true
end
class ArticlesController < ApplicationController
 
  # POST /articles
  def create
    @article = Article.new(article_params)
    if @article.save
      redirect_to @article, status: :created
    else
      # Yes 422 - not 400
      render :new, status: :unprocessable_entity
    end
  end

  private
 
  def article_params
    params.require(:article)
          .permit(:name, :section, :color)
  end
end
require 'rails_helper'
RSpec.describe "Articles API", type: :request do
  describe "POST /articles" do
    context "with invalid parameters" do
      it "returns 422 - Unprocessable entity" do
        post '/articles',
          params: { article: { name: '' }} 
        expect(response).to have_http_status :unproccessable_entity 
      end
    end
  end
end

Это инкапсулирует данные вместе с проверками, которые воздействуют на данные и ошибки проверки, чтобы вы отображали их обратно пользователю.

Модели (или объекты форм) можно использовать даже тогда, когда данные не сохранены в базе данных.

Вы должны использовать Article.find(params[:article_id]), который вызовет исключение ActiveRecord::RecordNotFound и вернет 404 - не найдено. Вероятно, вам следует просто начать с руководства по началу работы или чего-то еще, так как это довольно простой базовый материал для рельсов и не имеет ничего общего с проверками.

max 22.11.2022 13:54

Другие вопросы по теме