Я пытаюсь добавить данные в поле массива вместо переопределения.
Моя связь с пользователем имеет одно предпочтение
В предпочтениях таблица У меня два поля массива
profile_preferences массив целых чисел group_preferences массив целых чисел
Чего я хочу добиться - я хочу добавить данные в поле profile_preferences и group_preferences вместо переопределения
То, что я делаю, выглядит следующим образом
Class PreferencesController < ApplicationController
def update
if current_user.update(preference_params)
update_profile_preferences
update_group_preferences
render json: { success: true }, status: 200
else
render json: { error: "#{current_user.errors.full_messages}" }, status: 400
end
end
private
def preference_params
params.require(:user).permit(:first_name, :last_name, preference_attributes: [:id, :phone_number, :title, :profile_preferences => [], :group_preferences => [], :friends => [], :sales => []])
end
def update_profile_preferences
preferences = preference_params.try('[]', "preference_attributes").try('[]', "profile_preferences")&.map(&:to_i)
###Below I need to reload the object otherwise it is not working
preferences += current_user.preference.reload.profile_preferences if preferences.present?
current_user.preference.update_attributes(profile_preferences: preferences) if preferences.present?
end
def update_group_preferences
group = preference_params.try('[]', "preference_attributes").try('[]', "group_preferences")&.map(&:to_i)
group += current_user.preference.reload.group_preferences if group.present?
current_user.preference.update_attributes(group_preferences: group) if group.present?
end
end
Params
{"utf8"=>"✓", "authenticity_token"=>"/Vu86W4ydQ11iZ/WFEvn3QkxrOkkUtCq+asjdkaslkjadlkalksdk/uS1erNIwg==", "user"=>{"preference_attributes"=>{"friends"=>["50587"], "profile_preferences"=>["50586", "50588"], "group_preferences"=>["4", "2", "5"], "id"=>"778"}}, "first_name"=>"ssss", "last_name" => "jsjjj"}
Есть ли лучший способ добиться этого?
Примечание : Я использую jquery ajax для отправки данных формы