3

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

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 %>  

和路线.rb:

资源:人

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

AbstractController::ActionNotFound 找不到 PersonsController
的操作“5231d2491dba7fb057000004”

5231....... 是一个人的 id。

请求参数:

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

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

4

1 回答 1

1

您的最终评论揭示了错误的根源。

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

如果使用传统的 RESTful 路由resources :persons,您编辑路由将看起来像参数GET /persons/1/edit在哪里。你可以让这个人进入1id#edit

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

同样,您可以在#update 中再次获取路线为的人PUT persons/1

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

然后这个问题得到了回答。

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

params[:person][:photo] # Not params[:photo]
于 2013-09-14T08:24:22.887 回答