
AhmedAnonSom
16.02.2018
09:04:45

Alex
16.02.2018
09:09:40
подскажите пожалуйста, как в рельсах 4 получить в строгих параметрах один из параметров в виде хеша? В params он есть, в строгих параметрах он тоже вписан, но по итогу он пустой при сохранении модели... 10 вариантов с ST не помогли....

Aleksey
16.02.2018
09:10:33
покажи код

Alexander
16.02.2018
09:11:28

Google

Alexander
16.02.2018
09:11:58
если набор ключей неизвестен то проще записать в обход permitted attributes

Alex
16.02.2018
09:12:46
params = {"utf8"=>"✓", .... "description"=>"It is", "inventory"=>{"TV"=>"2", "Microwave"=>"1", "Mixer"=>"2"}}, "commit"=>"Post Your Job", "controller"=>"jobs", "action"=>"create"}
inventory мне нужен
def job_params
params.require(:job).permit(..., :inventory)
end

Alexander
16.02.2018
09:14:03
хеши пропускает только если указать ключи

Alex
16.02.2018
09:14:17
но хеш динамичный
ключи наборные

Alexander
16.02.2018
09:16:49
задача permitted attributes - не пропустить лишнего в модель, для этого им надо знать что именно можно.
если тип даных узнать никак нельзя - значит permitted attributes тут не прокатят

ojab
16.02.2018
09:17:53

Alexander
16.02.2018
09:17:55
my_record = MyRecord.new(my_record_params)
my_record.inventory = params[:inventory]

Alex
16.02.2018
09:18:48

Alexander
16.02.2018
09:18:49
или по хардкору
params.permit!

Google

Alex
16.02.2018
09:19:10
А в 4 как я понял нет

ojab
16.02.2018
09:19:25
оу, там четвёртые. Тогда никак, да.

Alex
16.02.2018
09:19:51
Просто
Но не красиво мжб
Спасибо)

Alexander
16.02.2018
09:20:51

Alex
16.02.2018
09:21:00
:)

Антон
16.02.2018
09:25:52
как-то вот так
params.require(:user).permit(:username).tap do |whitelisted|
whitelisted[:data] = params[:user][:data]
end
только ты обходишь inventory по каждому ключу и добавляешь в whitelisted каждое значение

Alexander
16.02.2018
09:28:38
на самом деле с точки зрения архитектуры то permitted attribues в контроллере это зло. Контроллер должен принять запрос, делегировать исполнение, вернуть результат. Он точно не должен знать что там покоится во внутренностях модели

Антон
16.02.2018
09:28:59
но в общем да, отдайть параметры форм обджекту/сервис обджекту проще и понятнее
и тесты лишний раз не будут падать ?
учитесь гуглить пагни

Alexander
16.02.2018
09:33:27
учитесь гуглить пагни
и что там? там точно также руками запихивается хеш в результат, в обход самого .permit

Alex
16.02.2018
09:34:40
params.require(:job).permit(:name, ... , :inventory)
params.require(:job).tap do |whitelisted|
whitelisted[:inventory] = params[:job][:inventory]
end
=> ActiveModel::ForbiddenAttributesError

Google

Alexander
16.02.2018
09:36:04
поменяй строчку
whitelisted[:inventory] = params[:job][:inventory].to_h ( или to_hash, не помню)

Антон
16.02.2018
09:37:58
=> ActiveModel::ForbiddenAttributesError
params = ActionController::Parameters.new(usernames: ["john", "kate"])
params.permit(usernames: [])
# => { "usernames" => ["john", "kate"] }
потестируй руками
хватит мучить чатик
врятли кто-то в здравом уме будет запоминать как такое делать
это вам не php

Alex
16.02.2018
09:40:40
в PHP проще и можно все запомнить? ?

Nikita
16.02.2018
09:40:53

Alexander
16.02.2018
09:41:19
она вылетит еще тут: params.require(:job)

Nikita
16.02.2018
09:41:20
whitelisted[:inventory] = params.dig(:job, :inventory)&.to_h

Антон
16.02.2018
09:41:28

Alexander
16.02.2018
09:42:12

Антон
16.02.2018
09:43:40
в PHP проще и можно все запомнить? ?
Недавно я читал пост в ЖЖ, где в комментариях прошла идея сравнения эникейщиков Windows и жрецов из D&D. Процитирую: «В игровой системе D&D придумано такое интересное деление для характеристик мыслительных способностей пресонажа: на INT (интеллект) и WIS (мудрость). Для мага более существенен INT, для священника – WIS, хотя игровая суть примерно одна и та же – использование волшебства (что это, как не проекция работы “компьютерщика” с точки зрения среднего обывателя). Впрочем, игровая механика нам тут несущественна, но интересна сама классификация способов постижения мира — путем самостоятельного построения логических конструкций (INT) или путем накопления знаний (WIS)».
отсюда, помоему прекрасно
https://habrahabr.ru/post/110767/

Nikita
16.02.2018
09:43:56

No
16.02.2018
09:44:50
Скорее это жизненный опыт, скилл "Жить в этом мире"

Антон
16.02.2018
09:45:36

Alexander
16.02.2018
09:46:33

Антон
16.02.2018
09:47:19

Nikita
16.02.2018
09:47:52
а дальше пусть валидирует

No
16.02.2018
09:53:51

Google

Roman
16.02.2018
10:03:18
Всем привет. Почему миграция не проходит? Просто ничего не происходит
https://gist.github.com/SunRa8/fe6cec33e570834c2154987b80a94ac3

Максим
16.02.2018
10:04:04

Roman
16.02.2018
10:04:23

Максим
16.02.2018
10:05:04
products_from_params
что это?

ojab
16.02.2018
10:05:53

Roman
16.02.2018
10:06:00
че-то пропустил, но суть в том, что даже никаких экзепшенов нет

ⰿⰰⰾⱏ
16.02.2018
10:06:12

Roman
16.02.2018
10:06:43
когда убираю весь код, кроме методов миграции, то все проходит

Nikita
16.02.2018
10:06:48
посмотри версию миграции, посмотри версию базы

Alexander
16.02.2018
10:06:51

Nikita
16.02.2018
10:06:55
и сделай выводы, проходила она или нет и почему

ojab
16.02.2018
10:07:11
а, у тебя там change
нужен up/down

Nikita
16.02.2018
10:07:23
ну там up 100%

ojab
16.02.2018
10:07:35
потому что рельсы не могут откатывать непонятные изменения
хотя, вроде, оно только при rollback должно жаловаться :/

Alexander
16.02.2018
10:08:14
вроде только при rollback падает

Roman
16.02.2018
10:09:02
я дропаю базу, накатываю миграции и эти изменения игнорятся

Google

Roman
16.02.2018
10:09:22
когда убираю весь код, кроме методов миграции, то все проходит

ojab
16.02.2018
10:09:22

Dmitry
16.02.2018
10:49:35
Ребят, подсажите, я чтото не врубаюсь в пятых рельсах чтобы сериализацию джейсона использовать в таком виде
render json: @posts, include: 'author.comments.**'
нужно ли какойто другой сериализатор подрубать
у меня сейчас работает только такого вида render json: @posts.to_json({include:[bla_bla]})
гем active_model_serializers
в самом контроллере делаю ActiveModelSerializers.config.adapter = :json_api
но ничего не меняется

Denis
16.02.2018
11:00:44
class PostSerializer < AMS
attributes :id, ...
has_many :comments
end
class CommentSerializer < AMS
attributes :id, ...
end
N+1 вроде надо отдельно хедлить (в этом не уверен)

Karina
16.02.2018
11:03:44
ребята, есть гем, который по номеру телефона определяет что за страна?

Dmitry
16.02.2018
11:04:24
а без указания сериализатора отдельно оно не будет работать? обязательно сериализатор писать под это дело?
у меня до этого все работало когда я передавал серивализатор прямо в джейсон и както особо отдельными файлами не делал сериализаторы

Denis
16.02.2018
11:05:17

Karina
16.02.2018
11:06:35
ок, спс

Artur
16.02.2018
11:08:47
есть еще Phony, тоже хороший

Denis
16.02.2018
11:12:38

ojab
16.02.2018
11:19:30
и работает ли .to_json(include: 'author.comments.**'), заодно

Karina
16.02.2018
11:29:20

Artur
16.02.2018
11:30:08
везде надо указывтаь код)))

ojab
16.02.2018
11:36:08

Denis
16.02.2018
11:38:06