Лучший способ добавить в поле массива вместо переопределения во вложенных атрибутах - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь добавить данные в поле массива вместо переопределения.

Моя связь с пользователем имеет одно предпочтение

В предпочтениях таблица У меня два поля массива

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 для отправки данных формы

...