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