
Evegeniy
13.02.2018
07:27:27
заюзай FormObject

Oleg
13.02.2018
07:27:33
Тут ведь проблема в другом, не в добавлении
Объект не обновляется...

Evegeniy
13.02.2018
07:27:57
в одновременном добавлении и редактировании?

Google

Evegeniy
13.02.2018
07:28:17
оу
Тогда совсем странно

Oleg
13.02.2018
07:28:37
Вот и я о том же)
Какие гайды только не перечитал

Evegeniy
13.02.2018
07:28:53
Подскажите, пожалуйста, использую nested_forms, модель компания имеет много телефонов. Когда делаю редактирование компании и меняю номера телефонов, то они просто добавляются, но не обновляются. что я делаю не так?
params.require(:company).permit(:name, { company_phones_attributes: [:id, :phone, :_destroy] })
<% @company.company_phones.each do |phone| %>
<%= f.fields_for :company_phones_attributes, phone, index: phone.id do |phone_fields| %>
<div class="form-group">
<%= phone_fields.label :phone, "Телефон" %>
<%= phone_fields.text_field :phone, class: "form-control form-control-lg" %>
</div>
<% end %>
<% end %>
могу предположить потому что id у телефона нет тут

Oleg
13.02.2018
07:29:10
он в индексе устанавливается
это 100%

Evegeniy
13.02.2018
07:29:44

Oleg
13.02.2018
07:30:38
Странно, я думал, что id вытаскивается из индекса
Нигде что-то не было подобной информации
Благодарья, Евгений!)

Evegeniy
13.02.2018
07:32:36
?

Google

Максим
13.02.2018
10:58:12
ребят никто не знает кк в http://jsonapi-rb.org/guides/serialization/rendering.html чётко указывать сериализатор? я уже пизда скок всего перепробовал и не могу понять

ojab
13.02.2018
11:06:05
указать jsonapi_class в контроллере или class в опциях к render jsonapi:, очевидно

Максим
13.02.2018
11:06:40
оно то ясно
я не понимаю как

ojab
13.02.2018
11:09:47
>class: a hash globally mapping model class names to serializable resource class names.
как бы говорит нам документация http://jsonapi-rb.org/guides/serialization/rendering.html. Ну и сериализаторы дожны быть подклассами JSONAPI::Serializable::Resource.

Максим
13.02.2018
11:11:27
т.е.?
я видел что там написано
мне вот не понятно что это значит
понятно что хеш да
а хеш с какими ключами? какие значения долнжы быть?

ojab
13.02.2018
11:13:06
сериализаторы, очевидно
классы

Максим
13.02.2018
11:13:28
ты мог бы пример написать?
мне так гораздо легче понять
типа class: {model: Serializer} ?

ojab
13.02.2018
11:46:42

Максим
13.02.2018
11:46:57
да, уже разобрался, спасибо
там оказывается если чётко указывать то нужно каждой сущности которую инклюдишь
а я только той чей контроллер, думал остальное сам подцепит

Denis
13.02.2018
15:11:53
Существует ли в рельсах 4 create_or_update

Google

ojab
13.02.2018
15:12:27
find_or_initialize_by и внутри блока апдейтишь что нужно

Denis
13.02.2018
15:12:41
Спасибо
ojab стоп, а разве через find_or_initialize_by можно сделать create or update?

David
13.02.2018
15:52:47
Только без сохранения в бд

ojab
13.02.2018
15:53:19
ну, он тебе инициализирует модель или достаёт из базы, а дальше ты с ней что хочешь делай

Denis
13.02.2018
15:53:25
Можно пример для особо одаренных?

ojab
13.02.2018
15:54:06
Model.find_or_create_by(first_name: 'model_name') do |model|
model.update!(last_name: 'new_name')
end

ⰿⰰⰾⱏ
13.02.2018
15:54:25

David
13.02.2018
15:55:21
Вообще есть получше метод
Этот уже устарел
https://snippets.aktagon.com/snippets/620-rails-find-or-initialize-and-find-or-create-methods-are-deprecated

ojab
13.02.2018
15:58:41

Denis
13.02.2018
15:59:56
ojab верно?
Auto::CarGeneration.find_or_create_by(id: row[0]) { |f|
f.update(name: row[1], car_model_id: row[2], year_begin: row[3], year_end: row[4], car_type_id: row[7])
}

ojab
13.02.2018
16:02:52
типа того, да. Но странно что parse_file возвращает Enumerator (не вызывпается .each и иже) + вместо row[index] лучше юзать destructuring (i. e. вместо |row| сделать |name, car_model_id, …|) + вместо .update юзать .update!

David
13.02.2018
16:05:47

Denis
13.02.2018
16:25:01
Update не работает
ojab
parse_file('car_type') { |row|
Auto::CarType.find_or_create_by!(id: row[0]) { |f|
f.update!(name: row[1])
}
}
Находит, создаёт но не обновляет

ojab
13.02.2018
16:30:05
ой

Google

ojab
13.02.2018
16:30:14
же, а не create
find_or_initialize_by и внутри блока апдейтишь что нужно
хотя он и с create должен обновлять, проще всего дебаггером встать внутри блока и посмотреть, что там в f/что происходит при update!

David
13.02.2018
16:46:59

Иван
13.02.2018
16:47:09
Блок же сработает только в случае initialize, получается если запись существует, то она не обновится

David
13.02.2018
16:47:23
Если нет, то можно попробовать update_attribute

ojab
13.02.2018
16:48:15
таки да, блок только при создании обрабатывается

David
13.02.2018
16:49:59

Иван
13.02.2018
16:57:47
Легче всего сделать
auto = YourModel.find_or_initialize_by(...)
auto.property = new_value
auto.save
Если нравятся блоки то через tap

Sergey
13.02.2018
20:36:34
#noob
объясните пожалуйста как у поста пропишется user_id. Я просто привык по-человечески самим писать логику маршрутов и контролеров и в rails вся подкапотная генереация мне кажется непонятной

ojab
13.02.2018
20:37:20
в post_params придёт, вестимо
а
http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_many
тебя интересует collection.create(attributes = {})
ассоциация User.has_many :posts создаёт метод User#posts.create

Sergey
13.02.2018
20:40:10

ojab
13.02.2018
20:40:21
(через # обозначаются методы интсанса, то бишь User.merthod — метод класса, а User#method — метод интсанса)
а тебя никто не заставляет юзать @user.posts

Google

ojab
13.02.2018
20:41:05
можешь передавать user_id как хочешь

Nikita
13.02.2018
20:42:18
Все в 1 слове

Sergey
13.02.2018
20:42:43

Nikita
13.02.2018
20:42:56
ojab какие сокета в рельсе заюзать? Про экшн кабель много негатива слышал
AnyCable?

ojab
13.02.2018
20:44:57
ActionCable, само собой

Andiskiy
13.02.2018
20:45:02

ojab
13.02.2018
20:45:06
anycable нужен, если actioncable не устраивает

Nikita
13.02.2018
20:45:57

ojab
13.02.2018
20:46:14

Nikita
13.02.2018
20:46:24

Andiskiy
13.02.2018
20:47:00

ojab
13.02.2018
20:47:13

Andiskiy
13.02.2018
20:48:16

Sergey
13.02.2018
20:48:26

Nikita
13.02.2018
20:48:34
puts)

Andiskiy
13.02.2018
20:48:55

Sergey
13.02.2018
20:49:08
ок спасибо )