由于我的代码和路由中的一些奇怪,我拼凑了一个表单。事情可以将数据添加到数据库,但我似乎无法弄清楚如何更新数据。这是一些代码。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小时的更好的一部分工作。我想我只是想念一些东西,但我看不到它。
有没有更好的方式来使表单更好地工作?
任何帮助表示赞赏。
由于您已经直接指定属性,因此不需要'update_attributes'调用,只需调用'save!'即可。 – 2011-03-22 18:16:45
就像我留在另一个人的评论。每当我这样做,它会插入一个新的记录,而不是更新旧的记录。我试了几次,以确保发生了什么。我一直在改变一个单一的领域大约10次,我最终有10个新的记录在分贝。 – percent20 2011-03-22 20:09:31