0

인스턴스에 STI가있는 4 개의 클론이 있습니다.Rails 중첩 된 작성 STI

작업 공간, 프로젝트, 작업, 인스턴스 (유형 1 < 인스턴스) 및 (유형 2 < 인스턴스).

적절한 연결을 사용하십시오. (작업 공간 has_many 프로젝트, 프로젝트를 통해 has_many 작업에 너무)

그리고이 만들 중첩 된 (STI를 구현하기 전에 일) :

if (%w(type1 type2).include?(params[:type])) 

sti_class = params[:type].classify.constantize 

workspaces.find_by_name(name: w_name). 
projects.where(name: p_name).first_or_create!. 
tasks.where(name: t_name).first_or_create!. 
sti_class.create() 

을 지금은 작동하지 않습니다, 나는 알아낼 수 없습니다 밖으로.

그러나 다음은 작동하지만 중첩 된 생성을 유지하려고합니다.

task= workspaces.find_by_name(name: w_name). 
     projects.where(name: p_name).first_or_create!. 
     tasks.where(name: t_name).first_or_create! 

sti_class.create(task_id: task.id) 

중첩 된 생성을 유지하려면 어떻게해야합니까?

답변

1

즉시 추론 할 수있는 문제는 메서드 체인에 추가 할 때 Task 모델에 sti_class 메서드가 정의되어 있지 않다는 것입니다.

정말 당신이 여기에 가장 좋은 방법을 다음하고 있지만 즉시 문제를 해결하기 위해 생각하지 마십시오, 당신은 아마 같은 것을 수행해야합니다

if (%w(type1 type2).include?(params[:type])) 
# depending on the association between the type(s) and the tasks, 
# you'd need to either singularize or pluralize here, I'd assume 
# task has many types, therefore pluralize 

sti_class = params[:type].pluralize 

# if you're already calling `find_by_name`, you don't need to pass 
# the name option here anymore, but the name argument 

workspaces.find_by_name(w_name). 
projects.where(name: p_name).first_or_create!. 
tasks.where(name: t_name).first_or_create!. 
send(sti_class).create 
+0

덕분에, 지금은 그것을 고수합니다 :) – Gaston

+0

cool. 그래도 문제가 해결되면 대답을 수락하십시오! – oreoluwa