我的行动:
...
def edit
@person = Person.find(params[:id])
end
def update
@person = Person.find(params[:id])
@person.update_attributes(person_params)
if @person.errors.empty?
redirect_to @person
else
render 'edit'
end
end
private
def person_params
params.require(:person).permit(:number, :family, :name, :patronymic, :other)
end
我的观点:
<h1>Редактировать личность</h1>
<%= form_for @person, url: persons_path do |f| %>
<p>Номер</p>
<p><%= f.text_field :number %></p>
...
<p><%= f.submit "изменить базу" %></p>
<% end %>
和路由器:
Rails.application.routes.draw do
resources :persons
end
答案 0 :(得分:2)
您不需要传递, url: persons_path
,因为persons
是资源,form_for @person
会发现它必须转到update
行动。
<%= form_for @person do |f| %>
应该没问题
如果您仍需要传递url
,则应为url: person_path(@person), html: {method: "patch"})
在Rails Edge指南中阅读有关此主题的更多信息 - http://guides.rubyonrails.org/v4.1/form_helpers.html#relying-on-record-identification
注意:正如@engineersmnky所指出的,您的config/routes.rb
传统上应该resources :people
。资源以复数形式指定。
如果您使用Rails生成脚手架 - rails g scaffold People name:string
,您会看到:
person.rb
people_controller.rb
resources :people