Rails更新方法,用于更新不工作的记录

时间:2013-09-14 07:12:52

标签: ruby-on-rails forms mongoid

我在 PersonsController 中有两种方法 - 编辑和更新以及模型:

def edit
  @person=Person.find(params[:id])
end

def update
    @person=Person.find(params[:id])
    @person.update_attributes(params[:person])
end  

和我的 edit.html.erb

<h2> Edit info here!</h2>
<%= @person.name %>

<%= form_for @person, html: {mulitpart: true}  do |f| %>
  <p><%= f.text_field :location %></p>
  <p><%= f.submit :submit , class: "btn btn-large btn-success" %></p>
<% end %>  

和routes.rb:

  

资源:人员

但是当我提交表格时,我得到了:

  

一个AbstractController :: ActionNotFound
  无法为PersonsController找到操作'5231d2491dba7fb057000004'

5231 .......是一个人的身份。

请求参数:

{"utf8"=>"✓", "_method"=>"put", "authenticity_token"=>"3TL7nn4UxhxFoxETeooBMThhkE0VdMoGFpjN9sx4srk=", "person"=>{"location"=>"nagpur"}, "commit"=>"submit", "controller"=>"persons", "action"=>"5231d2491dba7fb057000004"}

这里有什么问题?我正在使用mongoid和rails 3.2.13。

1 个答案:

答案 0 :(得分:1)

您的最终评论会揭示错误来源。

对于#edit#update,您不应在隐藏字段中手动设置参数,这也是不必要的。

如果使用传统的RESTful路线作为resources :persons,则您编辑的路线将显示为GET /persons/1/edit,其中1是参数id。您可以将此人#edit作为

@person = Person.find(params[:id])

同样,您可以在#update中再次找到该人,其路线为PUT persons/1

@person = Person.find(params[:id])

然后回答了问题。

但是代码中还有一个问题,即获得更新属性的部分。由于人物属性的参数是通过表单发送的,因此所有属性都在params[:person]下。因此,要获取照片属性,您应该使用

params[:person][:photo] # Not params[:photo]