2011-03-19 3 views
0

나는 코드와 경로의 이상한 점 때문에 양식을 함께 자수했다. 데이터를 데이터베이스에 추가하는 데는 문제가 있지만 데이터를 업데이트하는 방법을 알아낼 수는 없습니다. 여기에 몇 가지 코드가 있습니다.표준이 아닌 서식으로 update_attributes

new.html.erb

<% form_tag '/list' do %> 
    Episodes Completed: 
    <%= text_field_tag "completed" %> 
    Watch Status 
    <%= collection_select(nil, 'id', @show_status, :id, :state) %> 
    <%= hidden_field_tag('show_id', @show.id) %> 
    <%= submit_tag 'Add' %> 
<% end %> 

edit.html.erb 여기

<% form_tag("/list/#{@show_completion.show.id}", :method => :put) do %> 
    Episodes Completed: 
    <%= text_field_tag "completed", @show_completion.episodes_completed %> 
    Watch Status 
    <%= collection_select(nil, 'id', @show_status, :id, :state) %> 
    <%= hidden_field_tag('show_id', @show_completion.show.id) %> 
    <%= submit_tag 'Edit' %> 
<% end %> 

는 컨트롤러의 생성 및 업데이트 방법

def create 
    @show_completetion = ShowCompletionStatus.new 
    @show_completetion.user_id = current_user.id 
    @show_completetion.episodes_completed = params[:completed] 
    @show_completetion.status_state_id = params[:id] 
    @show_completetion.show_id = params[:show_id] 
    @show_completetion.save 
end 

def update 
    @show_completion = ShowCompletionStatus.find(params[:id]) 

    @show_completion.episodes_completed = params[:completed] 
    @show_completion.status_state_id = params[:id] 
    @show_completion.show_id = params[:show_id] 

    if @show_completion.update_attribute('episodes_completed', params[:completed]) 
    redirect_to "/list/#{current_user.username}" 
    else 
    redirect_to "/list/#{params[:id]}/edit" 
    end 
end 
여기

내입니다입니다 이 경로 :

match "list/" => "list#create", :via => :post 
match "list/new/:show_id" => "list#new", :constraints => { :show_id => /[0-9]+/ } 
match "list/:id/edit" => "list#edit", :constraints => { :id => /[0-9]+/ }, :via => :get 
match "list/:id" => "list#update", :constraints => { :id => /[0-9]+/ }, :via => :put 

나는 4 시간 이내에 더 나은 결과를 얻기 위해 여러 가지 시도를 해왔습니다. 나는 뭔가를 놓친 것 같아 보이지만 나는 그것을 볼 수 없다.

더 나은 작동 방식을 만드는 더 좋은 방법이 있습니까?

도움을 주시면 감사하겠습니다.

답변

0

해시를 만들고 개체 특성이 될 키 값 쌍을 사용하여 업데이트 특성에 전달하여이 문제를 해결했습니다. updates_attributes는 객체가 아닌 해시를 사용하기 때문에 일단 연결되면 간단한 해결책이되었습니다.

+0

이미 속성에 직접 할당 했으므로'update_attributes' 호출이 필요 없으며'save! '를 호출하십시오. –

+0

다른 하나의 코멘트에 남겨 두었습니다. 내가 할 때마다 새 레코드를 삽입하고 이전 레코드를 업데이트하지 않습니다. 나는 그것이 일어나고 있는지 확인하기 위해 여러 번 시도했다. 나는 약 10 번 동안 하나의 필드를 계속 변경했고, 나는 db에서 10 개의 새로운 레코드를 갖게되었다. – percent20

0

update_attribute 전화를 save 전화로 바꾸십시오. 당신은 모든 것을 처음부터 작성하는 대신 내장 명령을 사용하는 경우

또한, save! 대신 save를 사용하려고 : 실패하면 그냥 false를 반환하는 일반 save는 달리, 예외를 발생합니다.

+0

내가하고있는 문제는 이전 레코드를 편집하는 대신 매번 새로운 레코드를 생성한다는 것입니다. – percent20

관련 문제