我在 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。
答案 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]