2013-04-14 1 views
0

EditNew 메소드에 동일한 html 양식을 사용하고 싶습니다.편집 및 신규 메소드와 동일한 양식

컨트롤러 방법 :

def new 
    render "edit" 
end 

def edit 
    if params[:id].present? 
    @goat = Goat.find(params[:id]) 
    else 
    @goat = Goat.new 
    end 
end 

Edit 형태 :

<% form_for @goat do |f| %>  
<%= f.text_field :title %> 
<%= f.submit "Update" %> 
<% end %> 

그것은 @goat 기록이 존재 Edit 방법 잘 작동하지만, 컨트롤러는 @goat = Goat.new을 제공 New 방법에 대해 내가 오류가 발생했습니다 :

undefined method model_name for NilClass:Class

해결 방법?

+1

작성 방법에 대한 코드를 추가 할 수 있습니까? – dpassage

+0

코드가 없습니다 ...이 오류에 영향을 미칠 수 있습니까? – Gediminas

+0

당신은 "내가 만든 편집 방법에서 편집 편집을 추가했습니다"라고 말했습니다 ... – dpassage

답변

1

문제는 사용자가 실제로 html로 새 @goat을 설정하지 않는다는 것입니다. 이 코드에서

:

def new 
    render "edit" 
end 

이 컨트롤러에 edit 메소드를 호출하지 않는다; 대신 바로 뷰 레이어로 이동하여 edit.html.erb 파일을 렌더링합니다. 따라서 @goat 값은 없으므로 오류가 발생합니다.

@ user2191327이 제공 한 것과 같은 코드가 더 좋습니다. 당신은 또한 스캐 폴드가 당신의 컨트롤러를 위해 생성하는 것을보아야합니다; 관용적 인 레일스가 어떤 모습인지에 대한 좋은 안내서입니다.

1

당신은 단지 렌더링 사용하는 것과 동일한 HTML을 사용하려는 경우 : 템플릿 & & new.html

P.S.을 edit.html에 부분 렌더링 사용

def new 
    @goat = Goat.new 
    render template: 'edit' 
end 

def edit 
    @goat = Goat.find(params[:id]) 
end 

또는 더 좋은 방법 템플릿 'new'대신 action 'edit'을 사용하십시오. routes.txt 파일을 보면 액션 경로가 다음을 포함합니다 : class instance의 id.

+0

감사! 나는 그것을 올바른 방법으로 사용하는 방법을 알지 못했지만 내가 잘못한 부분이있었습니다! 다시 한 번 감사드립니다! – Gediminas

관련 문제