gpt4 book ai didi

ruby-on-rails - 用于更新记录的 Rails 更新方法不起作用

转载 作者:行者123 更新时间:2023-12-04 07:37:12 24 4
gpt4 key购买 nike

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

和routes.rb:

resources :persons

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

AbstractController::ActionNotFound
The action '5231d2491dba7fb057000004' could not be found for PersonsController

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

请求参数:

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

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

最佳答案

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

无论是#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])

然后问题就得到了回答。

但是您的代码中还有一个问题,即获取更新属性的部分。因为person属性的params是通过form传递的,所以所有的属性都在params[:person]下。因此,要获取照片属性,您应该使用

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

关于ruby-on-rails - 用于更新记录的 Rails 更新方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18799322/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com