부모 모델과 하위 모델 (상위 has_many : 하위)이있는 레일 3 앱을 시작하고 있습니다.다른 컨트롤러의 메서드에 유효성 검사 오류 메시지를 전달하려면 어떻게해야합니까?
새로운 부모를 만든 후에 사용자가 해당 부모 (/ parent/id)의 show 작업으로 이동하도록 설정하려고합니다. 이 견해에서 나는 어떤 아이들을 보여주기위한 부분적인 부분과 새로운 아이를 만드는 양식을 포함 시켰습니다. 새 하위를 만든 후 사용자는 새 하위가 표시 될 상위에 대한 표시 작업으로 리디렉션됩니다. 이것은 모두 의도 한대로 작동합니다.
그러나 새 자식 폼의 필드의 유효성을 검사하려고하면 발생하는 모든 오류 메시지가 양식에 나타나지 않습니다. 뷰의 필요한 줄이 있으며 올바르게 생성 된 스캐 폴드 코드에서 잘라내어 붙여 넣습니다. 자식에 대한 이러한 오류 메시지를 부모 표시 작업에 성공적으로 전달하는 방법이 있습니까?
다음은 관련 코드 스 니펫입니다. 부모님 컨트롤러에서
:
def show
@parent = Parent.find(params[:id])
@child = @parent.children.new
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @admission }
end
end
내 아이 컨트롤러에서 : 아이가 무효 인 경우 당신은 단지 부모의 쇼 페이지를 렌더링하면 어떻게
def create
@child = Child.new(params[:parent])
respond_to do |format|
if @child.save
format.html { redirect_to(parent_path(params[:child][:parent_id]), :notice => 'Child was successfully created.') }
#This works as intended
format.xml { render :xml => @child, :status => :created, :location => @child }
else
format.html { redirect_to parent_path(params[:child][:patient_id]) }
#This redirects where I want it to go when validation fails but error messages are lost
format.xml { render :xml => @child.errors, :status => :unprocessable_entity }
end
end
end
덕분에 내 아이 컨트롤러
에서 그리고 내 부모 컨트롤러
, 즉 오류 메시지가 시작되는 표시 있어요. (주위를 읽고 - 렌더링 '부모/쇼'올바른 방법입니다). 문제는 리디렉션이 없기 때문에 표시된 URL이 유효하지 않다는 것입니다. 이것은 훨씬 작은 문제이지만 여전히 이상적이지 못합니다. 부모를 먼저로드하는 방법에 대한 팁을 보내 주셔서 감사합니다 (악의적 인 사용자는 여전히 유효하지만 올바르지 않은 parent_id를 보내어 자녀를 첨부 할 수 있음). 또한 Parent.find (params [: child] [: parent_id]) 및 .build (params [: child]) 여야합니다. 현명한 사람이 되려하지 않으려 고합니다. 단지 이것을 읽는 다른 사람들을 돕기 위해 노력하고 있습니다. – brad