Rails: 如何使用服务在银行中保存和更新数组

Rails: How to save and update array in bank with service

我是 Rails 的新手,也是一名英语学生,我正在使用 Google 在这里翻译成 post。

我想知道如何保存 CNAES 数组以及我使用的关系是否正确:

这是银行:

models - relationships:
class User < ApplicationRecord
  has_many :user_cnae_classifications
  has_many :cnae_classifications, through: :user_cnae_classifications
end
class CnaeClassification < ApplicationRecord
  belongs_to :user
  belongs_to :cnae_classification

  has_many :user_cnae_classifications
  has_many :users, through: :user_cnae_classifications
end

我的 users_controller 调用服务:

  def create
    @user = User.new(user_params)
    if @user.save
      SaveUserCnaeClassifications.new(@user, user_cnae_classifications_param).call

      render json: @user, status: 200
    else
      render json: {errors: @user.errors}, status: 422
    end
  end

private
  def user_cnae_classifications_param
    param = params.require(:user).permit(
      cnae_classifications: []
    )
param[:cnae_classifications]
  end

这是我无法保存的服务 - 正在建设中

class SaveUserCnaeClassifications
  def initialize(user, cnae_classifications)
    @user = user
    @cnae_classifications = cnae_classifications
  end

  def call
    return if @cnae_classifications.nil?
      
    user.cnae_classifications != cnae_classifications
  end

  private
 
end

我的关系正确吗? 我如何在我的服务中保存 CNAES 阵列? CNAE = 公司在巴西提供的服务类型的标识号。

一个用户可能有多个 CNAE,并且可以根据需要更新 CNAES。

任何website/blog/tips对于相关研究都会有很大的帮助。谢谢

您可以使用accepts_nested_attributes

示例:

class User < ApplicationRecord
  has_many :user_cnae_classifications
  has_many :cnae_classifications, through: :user_cnae_classifications

  accepts_nested_attributes_for :cnae_classifications
end

您不需要 class SaveUserCnaeClassifications