没有路线匹配[PATCH]" / people"

时间:2017-09-28 18:18:47

标签: ruby-on-rails ruby

我是红宝石的新手。他看到了这样一个错误,他浏览了很多文章,我完全按照指示做了一切,但没有任何结果。随着创建一切顺利,但在更新发誓。

  

我的行动:

...

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

1 个答案:

答案 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,您会看到:

  1. 型号 - person.rb
  2. controller - people_controller.rb
  3. 路线助手 - resources :people