2016-10-14 3 views
0

쉬운 편집 방법에 빠져서 해결하지 않으면 계속 진행할 수 없습니다.레일이있는 편집 방법에 붙어 있습니다.

인덱스보기에 항목 목록이 있으며 각 항목에는보기 항목 단추, 삭제 단추 및 편집 단추가 있습니다.

나는 만들고 표시하고 삭제하는 데 아무런 문제가 없지만 편집 방법이 길 듭니다.

내 activities_controller.rb

def edit 
    @activity = Activity.find(params[:id]) 
    if @activity.update(activity_params) 
     redirect_to @activity 
    else 
     redirect_to :edit 
    end 
end 

private 

    def activity_params 
     params.require(:activity).permit(:name, :description) 
    end 

이며,이 편집이다 : 항목의 목록에서

<%= form_for(@activity) do |f| %> 
    <p> 
     <%= f.text_field :name %> 
     <%= f.label :name, "Name" %> 
    </p> 
    <p> 
     <%= f.text_area :description" %> 
     <%= f.label :description, "Descripction" %> 
    </p> 
<p> 
    <%= f.submit "save", class: "btn" %> 
</p> 
보기 :

<% @activities.each do |activity| %> 
    <%= activity.name %> 
    <%= link_to "edit", edit_activity_path(activity), class: "btn"%> 
<% end %> 

모두에서 예를 들자면 쇼 항목보기에서 편집 버튼을 수행하고, 그래서 그들은 경로 매개 변수로 @activity를 사용합니다. 그러나 제 루프에서는 @activity를 사용할 수없고 activity을 사용합니다. 내 멍청한 놈이 여기 있다고 생각하지만 어떻게 고칠 수 있는지 생각할 수 없다.

예를 들어 localhost : 3000/activities/11/edit를 입력하면 "param is missing 또는 값이 비어 있습니다 : activity"라는 메시지가 표시됩니다.

전에 말했듯이 @activity 대신 path param 활동으로 전달하기 때문에 그것이 강력한 매개 변수 "activity_params"에 대해 수행 한 구조가 아닙니다. 그러나이 순간 나는 해결책을 보지 못했습니다.

답변

5

문제는 @activity과 대조적으로 activity을 사용하는 인스턴스 변수가 아닙니다. 문제는 edit 동작이 양식을 표시하는 데 사용되며 실제로는 모델을 업데이트하는 데 사용되는 update 동작과 혼동하는 것입니다.

def edit 
    @activity = Activity.find(params[:id]) 
end 

def update 
    @activity = Activity.find(params[:id]) 
    if @activity.update(activity_params) 
     redirect_to @activity 
    else 
     render :edit 
    end 
end 

은 사용자가 의도하거나 시도하려는 내용에 더 가깝습니다.

+0

아, 저를 때려주세요! :) 나는 내 대답을 지울거야. – SteveTurczyn

+0

물론, 당신 말이 맞습니다. 고맙습니다! – user6945851

관련 문제