속한 모델의 속성을 사용하여 has_many 연관에서 모델에 속성을 설정하는 가장 포괄적 인 방법은 무엇입니까?

내 우주선

두 개의 ActiveModel MultivariateExperimenthas_many MultivariateExperimentVariant있습니다. 반대로, .MultivariantExperimentVariant belongs_toMultivariateExperiment

MultivariateExperiment속성이 experiment_name있습니다.

MultivariantExperimentVariant속성 nameweighting.

나는 변종 '원하는 name형식으로 experiment_name_0, experiment_name_1예를 들어, 다음 MultivariateExperiment을 부여 등 :

mve = MultivariateExperiment.create({ experiment_name: 'user_signup' })

관련 변형을 프로그래밍 방식으로 사용하고 싶습니다.

mve.multivariate_experiment_variants.create({ weighting: 1 }) # expected name: "user_signup_0"

mve.multivariate_experiment_variants.create({ weighting: 1 }) # expected name: "user_signup_1"

mve.multivariate_experiment_variants.create({ weighting: 2 }) # expected name: "user_signup_2"

나는 처음에 이것을 after_commit콜백 에 넣는 것에 대해 생각 했지만 콜백이 불완전하기 때문에 코드 검토에서 피하도록 지시 받았습니다 (이유는 확실하지 않음)

몇 가지 다른 콜백을 살펴 보았지만 다음과 같이 연결을 만들 수있는 수많은 방법을 포괄 할만큼 포괄적 인 콜백은 없습니다.

# 1st approach
mve.multivariate_experiment_variants.create({ weighting: 1 })

# 2nd approach
variant = MultivariateExperimentVariant.create({ weighting: 1 })
mve << variant
mve.save

# 3rd approach
mve.multivariate_experiment_variants.build({ weighting: 1 })
mve.save


# etc. etc.

따라서 연관을 생성하는 다양한 방법을 고려할 때 has_many해당 모델이 속한 모델의 속성을 사용하여 관계 에서 모델의 속성을 성공적으로 계산할 수있는 메커니즘이나 접근 방식이 있습니까?

마크 메리트

에서 MultivariateExperimentVariant모델 당신은 할 수 ...

after_save :set_name

private

def set_name
  # Assuming you have a required belongs_to
  update(name: "#{multivariate_experiment.name}_#{multivariate_experiment.multivariate_experiment_variants.length - 1}")
end

조건 after_commit을 지정하지 않으면 사용 하지 않을 것입니다.on:

after_commit :set_name, on: [:create, :update]

그렇지 않으면 레코드가 삭제 된 후 이름을 설정하려고합니다.

참고 : 대신 색인을 확인하는 것이 더 나을 수 있습니다.

 update(name: "#{multivariate_experiment.name}_#{multivariate_experiment.multivariate_experiment_variants.index(self)}")

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관