
Vasiliy
11.04.2017
11:39:34
да

v
11.04.2017
11:39:50
а потом делаешь
if !chapter.new_record?
render json: chapter
else
render json: [book.errros, chapter.errors]
end
как-то так

Vasiliy
11.04.2017
11:41:32
в случае тенпентая надо
if books.chapters.size < 5
if chapter.save
render
else
render
end
else
render
end

Google

v
11.04.2017
11:42:14
это зависит от степени твоей извращенности
я выше предложил вариант попроще

Evgeniy
11.04.2017
11:42:35
У тебя как бук с чаптерами сохраняется, вместе? accepts_nested_attributes_for ? или ты руками создаешь?

Vasiliy
11.04.2017
11:43:40
у меня вообще чаптер сохранялся
chapter.save
в принципе решение норм поставить на
class Chapter
belongs_to :book, autosave: true
end

v
11.04.2017
11:45:30
извращения, извращения

Vasiliy
11.04.2017
11:46:12
тык наоборот же проще добавить autosave: true чем эта елка из ифов

Evgeniy
11.04.2017
11:47:08
class Chapter
belongs_to :book, counter_cache: true
validate :deny_extra_chapters
def deny_extra_chapters
errors.add(:base, 'В книге уже есть 5 глав') if book.chapters_count == 5
end
end

v
11.04.2017
11:47:14
елку из ифов ты сам выдумал

Evgeniy
11.04.2017
11:47:35
в Book добавь поле chapters_count
как-то так

v
11.04.2017
11:47:51

Vasiliy
11.04.2017
11:48:06
ооокей, как без елки из ифов?

Google

v
11.04.2017
11:48:33

Vasiliy
11.04.2017
11:48:45
а до этого нет ифов?

v
11.04.2017
11:49:08
до этого нет

Evgeniy
11.04.2017
11:49:10
Что бы ошибка была на чаптере, но мне не очень нравится такой подход)

Vasiliy
11.04.2017
11:49:17
КАК???

v
11.04.2017
11:49:30
перебор глав - это свойство книги
а

Evgeniy
11.04.2017
11:50:07
Это вопрос не ко мне)) Это было изначальное условие задачи))
Я согласен с тем что проверку кол-ва чаптеров надо делать на буке

v
11.04.2017
11:50:10
ну один иф будет

Vasiliy
11.04.2017
11:50:24
def create
@chapter = @book.chapters.new(chapter_params)
if @book.save
render json: @chapter, include: 'link'
else
render json: @chapter.errors, status: :unprocessable_entity
end
end

v
11.04.2017
11:50:46
чот жесть

Evgeniy
11.04.2017
11:50:53
> @silentshade
Я так понимаю проблема такая:
Надо НЕ сохранять чаптер если он вылезает за рамки 5 у бука, так? При этом ошибку хочется видеть на чаптере а не на буке..
Тут в любом случае надо запрашивать сколько чаптеров у бука, иначе откуда чаптер узнает что он уже 6
> @vasivas
да

Vasiliy
11.04.2017
11:50:59
ну с autosave проверка остаесть на буке

v
11.04.2017
11:51:02
ты зачем книгу сохраняешь?

Evgeniy
11.04.2017
11:51:12
Я так понимаю чаптеры сохраняются отдельно
от книг
и вот
если это уже 6ой

Google

Evgeniy
11.04.2017
11:51:26
то его не надо сохранять
если я правильно все понял

Vasiliy
11.04.2017
11:51:34
потому что @chapter.save возратит true ну

v
11.04.2017
11:51:54
считай, не перебор ли глав и сохраняй, если не перебор

Evgeniy
11.04.2017
11:52:49
это то же самое, только ты предлагаешь считать в контроллере, а я в валидации
в целом в контроллере наверное правильней, но в валидации можно получить нативную ошибку в модели..

Vasiliy
11.04.2017
11:54:08
кароч autosave: true решает всё
на belongs_to :city

v
11.04.2017
11:54:27
что он решает?
проблему проверки количества дочерних записей?
сомневаюсь

Vasiliy
11.04.2017
11:54:58
@chapter.save вернет false если глав больше

Evgeniy
11.04.2017
11:55:29
А валидация на книге стоит?

v
11.04.2017
11:55:32
как?
без валидации?

Evgeniy
11.04.2017
11:56:06
autosave тебе просто сохраняет связанные модели ДО сохранения главной в одной транзакции

Vasiliy
11.04.2017
11:57:17
на книге да
как вы и советуете, лол)

Evgeniy
11.04.2017
11:57:50
@chapter.errors что говорит?

Google

Evgeniy
11.04.2017
11:57:59
после сохранения?
и @book.errors

Vasiliy
11.04.2017
11:59:04
@chapter.erros говорит {"book.chapters":["слишком большой длины (не может быть больше чем 5 символов)"]} (сообщение в данном случае не очень имеет значение)

v
11.04.2017
12:00:01
а почему оно в chapter.errors, а не в book.errors?

Vasiliy
11.04.2017
12:02:20
def create
@chapter = @book.chapters.new(chapter_params)
if @book.chapters == 5
render json: :errors, status: :unprocessable_entity
else
if @chapter.save
render json: @chapter
else
render json: @chapter.errors, status: :unprocessable_entity
end
end
end
охуеть же

Evgeniy
11.04.2017
12:03:58
а зчем первое условие если у тебя уже есть в модели валидация на это?)

Vasiliy
11.04.2017
12:04:19
хотя да, можно так же лол)
def create
@chapter = @book.chapters.new(chapter_params)
@book.save
if !chapter.new_record?
render json: @chapter, include: 'link'
else
render json: @chapter.errors, status: :unprocessable_entity
end
end

Evgeniy
11.04.2017
12:06:06
хм, интересно

Vasiliy
11.04.2017
12:07:11
ну и да, в елсе ошибки с бука подтянуть ещё

Admin
ERROR: S client not available

Evgeniy
11.04.2017
12:07:51
а можешь показать как у тебя валидация написана?
в кол-во
просто я такого не встречал что бы автосейв копировал ошибку

Vasiliy
11.04.2017
12:09:39
да как-то так validates :chapters, length: { maximum: 5 }
я не первый раз вижу когда parent.child: 'error' идёт вид ошибки
нестед_аттрибутес так делает, т.к. там аутосейв врубается для связей

Evgeniy
11.04.2017
12:21:29
забавно.. а у меня ошибка только на паренте
а рельса какая?

Vasiliy
11.04.2017
12:23:19
4.2 но и в 5 так было
я тут кстати за енумы топил в моделях недавно - кароч гавно это, кек)

Google

Evgeniy
11.04.2017
12:28:07
блин вроде все прописано а не работает) 4.2.7 рельса

Vasiliy
11.04.2017
12:29:11
ну т.е. если устанавливает не юзер то может вполне и ок, а если юзер, то при кривом значении енум просто нахер летит ексепшен ArgumentError и всё, никакой норм обработки

Evgeniy
11.04.2017
12:29:49
Энум на то и энум что его не надо давать устанавливать, его можно только выбирать

Di
11.04.2017
13:13:39
Скажите, а такая штука в роуте это кака или я привередничаю?
get 'add_like' => 'likes#create', as: :add_like
Создание сущности через get запрос это же не тру или можно?

Artur
11.04.2017
13:15:11
не REST
заклюют тебя за такое

Di
11.04.2017
13:22:42
Да это не я, это наследство. Размышляю переделать ли. Переделаю.

v
11.04.2017
13:27:39
да вообще размножение get/post/match в routes.rb - Это ниочинь

Silent Bob
11.04.2017
13:38:40
Как можно сократить строку посередине? К примеру есть юрл "https://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Literals" мне надо получить => "https://en.wik...ntax/Literals"

v
11.04.2017
13:39:55
взять энное количество символов с начала и конца строки, в середину впиндюрить многоточие

Vasiliy
11.04.2017
13:45:28
"#{url[0..10]}....#{url[-10..-1]}"

Александр
11.04.2017
13:47:03
с короткой строкой заглючит, наеврное

Василий
11.04.2017
13:47:18
truncate метод есть, там omission параметр вместо многоточий конец строки передавать можно

Антон
11.04.2017
13:47:21

Vasiliy
11.04.2017
13:47:45
да, так проще

Антон
11.04.2017
13:48:03
да и зеленое приятнее

Vasiliy
11.04.2017
13:49:34
truncate конец же только режет

Александр
11.04.2017
13:50:17
url.sub(/\A(.{10}).+(.{10})\Z/m, '\1...\2')

Василий
11.04.2017
13:51:01
truncate(str, length: 10, omission: "...#{str[-5..-1]}")
Если str строка короткая, то обрезаний не будет:
str = 'Qwerty' => 'Qwerty'