두 개의 ActiveModel MultivariateExperiment
이 has_many
MultivariateExperimentVariant
있습니다. 반대로, .MultivariantExperimentVariant
belongs_to
MultivariateExperiment
MultivariateExperiment
속성이 experiment_name
있습니다.
MultivariantExperimentVariant
속성 name
및 weighting
.
나는 변종 '원하는 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] 삭제
몇 마디 만하겠습니다