2011-03-19 68 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!'即可。 – 2011-03-22 18:16:45

+0

就像我留在另一個人的評論。每當我這樣做,它會插入一個新的記錄,而不是更新舊的記錄。我試了幾次,以確保發生了什麼。我一直在改變一個單一的領域大約10次,我最終有10個新的記錄在分貝。 – percent20 2011-03-22 20:09:31

0

嘗試替換您的update_attribute致電save致電。

另外,如果你正在寫一切從頭開始,而不是使用內建命令,嘗試使用save!而不是save:如果失敗,將引發異常,不像普通save剛剛返回false

+0

我這樣做的問題是每次都會創建新記錄而不是編輯舊記錄。 – percent20 2011-03-22 08:49:45