Size: a a a

Saint P Ruby Community

2020 December 02

AR

Anna Razumova in Saint P Ruby Community
а сработает?😀
источник

w

wi11son in Saint P Ruby Community
Anna Razumova
интересно
собственно это же я и имел ввиду, но возникает вопрос, почему у тебя разный типы структур могут приходить. нет ли там возможности разбить по типу на два разных оперейшна и уже в экшенах валидировать драем только известную заранее в этом оперейшне данные
источник

PP

Pavel Peganov in Saint P Ruby Community
Но я скорее солидарен, что это уже выход за рамки задуманного кейса для strong parameters
источник

RR

Ruslan Ryabov in Saint P Ruby Community
я думаю даже скорее применение не по назначению 🙂
источник

PP

Pavel Peganov in Saint P Ruby Community
Anna Razumova
а сработает?😀
— Долбанёт?
— Не должно!
источник

AR

Anna Razumova in Saint P Ruby Community
Pavel Peganov
— Долбанёт?
— Не должно!
А чего отходишь?
источник

PP

Pavel Peganov in Saint P Ruby Community
Anna Razumova
А чего отходишь?
ТБ!
источник

RR

Ruslan Ryabov in Saint P Ruby Community
Anna Razumova
А чего отходишь?
Так лучше видно
источник

AR

Anna Razumova in Saint P Ruby Community
окей, какие есть еще нормальные способы сделать это?
источник

AR

Anna Razumova in Saint P Ruby Community
без тяжелых dry штук
источник

RR

Ruslan Ryabov in Saint P Ruby Community
я делал через форм обджекты, можно самому написать их, я раньше пользовался вот таким гемом https://github.com/andypike/rectify
источник

RR

Ruslan Ryabov in Saint P Ruby Community
ты по сути скармливаешь в этот класс params  а он его маппит на описанные поля
источник

v

vizvamitra in Saint P Ruby Community
с форм обжектами есть проблема: они имеют обыкновение распухать, а правила из них потом часто приходится частично дублировать в админке
источник

A

Anton in Saint P Ruby Community
Anna Razumova
Привет всем! Снова вопрос - как отвалидировать входящие параметры с помощью params.permit, если наполнение хеша одного из них зависит от значения другого. Например
params1 = {
     type: 'single line',
     validation: {
         require: true,
         max_chars: 10
     }
 }

 params2 = {
     type: 'checkbox',
     validation: {
         require: true,
         options: [1,2,3,4]
     }
 }
Мне кажется зависит от задачи. params.permit может принимать массив. Как вариант создать сервис обхект который проверяет все параметры перед передачей в permit и выпиливает их если не соответсвует условиям. Но не будет сообщения почему этот параметр отсутсвует. Тут можно посмотреть на params.requre который райзит эксепшен и как вариант в этот эксепшен натолкать сообщений о ошибках в параметрах. Но я не пробовал
источник

AR

Anna Razumova in Saint P Ruby Community
Ну у меня мягкий игнор, если что то лишнее есть, прост очищаю и работаю как предполагается
источник

AR

Anna Razumova in Saint P Ruby Community
Если недостает, уже да, но вроде как он сам справляется с ошибками
источник

RR

Ruslan Ryabov in Saint P Ruby Community
vizvamitra
с форм обжектами есть проблема: они имеют обыкновение распухать, а правила из них потом часто приходится частично дублировать в админке
можно выносить в модули и инключить поля, мы именно так боролись у себя с дублированием
источник

A

Anton in Saint P Ruby Community
у меня кстати параметры все лежат в отдельных классах
источник

A

Anton in Saint P Ruby Community
def persona_params
 params.require(:persona).permit Schemas::ParamsSchema.call
end
источник

RR

Ruslan Ryabov in Saint P Ruby Community
я думаю, что изначально проблема с permit  которая вышла из вопроса, что в “одном” параметр могут быть разного формата структуры, что там скорее всего список структур, а не закрытых отдельным ключем, поэтому пермит не может нормально выбрать схему, конфликтует
источник