Ruby Rails 3.2,没有路由匹配{:controller=>;';xxx';:action=>;';xxx";}

Ruby Rails 3.2,没有路由匹配{:controller=>;';xxx';:action=>;';xxx";},ruby,ruby-on-rails-3,routes,Ruby,Ruby On Rails 3,Routes,我正在尝试使用复选框表单编辑多条记录,如中所示。从那以后,Rails发生了变化,我在路由和表单方面遇到了问题 我有一个PeopleController,我正试图制作一个表单,一次编辑他们的所有电话号码。是的,我知道这不是一个有用的功能,因为通常没有理由将每个人的电话号码更改为同一个号码,但我只是用它来熟悉代码——而且它不起作用 以下是我得到的: 人事主任: class PeopleController < ApplicationController helper_method :sor

我正在尝试使用复选框表单编辑多条记录,如中所示。从那以后,Rails发生了变化,我在路由和表单方面遇到了问题

我有一个PeopleController,我正试图制作一个表单,一次编辑他们的所有电话号码。是的,我知道这不是一个有用的功能,因为通常没有理由将每个人的电话号码更改为同一个号码,但我只是用它来熟悉代码——而且它不起作用

以下是我得到的:

人事主任:

class PeopleController < ApplicationController
  helper_method :sort_column, :sort_direction

  def index
    @people = Person.order(sort_column + " " + sort_direction)

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @people }
    end
  end

  # GET /people/1
  # GET /people/1.json
  def show
    @person = Person.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @person }
    end
  end

  # GET /people/new
  # GET /people/new.json
  def new
    @person = Person.new

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @person }
    end
  end

  # GET /people/1/edit
  def edit
    @person = Person.find(params[:id])
  end

  # POST /people
  # POST /people.json
  def create
  ...
  end

  # PUT /people/1
  # PUT /people/1.json
  def update
  ...
  end

  def update_multiple
    @people = Person.find(params[:people_ids])
    @people.each do |person|
      person.update_attributes!(params[:person].reject { |k,v| v.blank? })
    end
    flash[:notice] = "Updated people"
    redirect_to people_path
  end

  # DELETE /people/1
  # DELETE /people/1.json
  def destroy
  ...
  end

  private

  def sort_column
    Person.column_names.include?(params[:sort]) ? params[:sort] : "name"
  end

  def sort_direction
    %w[asc desc].include?(params[:direction]) ? params[:direction] : "asc"
  end

end
和耙道:

update_multiple_people PUT    /people/update_multiple(.:format) people#update_multiple
                people GET    /people(.:format)                 people#index
                       POST   /people(.:format)                 people#create
            new_person GET    /people/new(.:format)             people#new
           edit_person GET    /people/:id/edit(.:format)        people#edit
                person GET    /people/:id(.:format)             people#show
                       PUT    /people/:id(.:format)             people#update
                       DELETE /people/:id(.:format)             people#destroy
编辑:


我的路线混乱不堪。如上图所示,它们现在工作正常。

submit
上查看代码检查器,并验证您是否被路由到
GET
请求


如果您得到的404导致GET请求而不是PUT请求,那是因为
:method=>:PUT
选项依赖于JavaScript。您需要确保
jquery rails
已正确集成到您的应用程序中。

submit
上查看代码检查器,并验证您是否被路由到
GET
请求


如果您得到的404导致GET请求而不是PUT请求,那是因为
:method=>:PUT
选项依赖于JavaScript。您需要确保
jquery rails
已正确集成到您的应用程序中。

您正在尝试获得以下路径:

没有路由匹配{:controller=>“people”,:action=>“edit_multiple”}

但在route.rb中,您需要包括:id属性

人员/:id/编辑\u多个

所以在表单中,您需要包含个人id

请尝试以下代码以获取此路由{:controller=>“people”,:action=>“edit_multiple”}


您正在尝试获取以下路径:

没有路由匹配{:controller=>“people”,:action=>“edit_multiple”}

但在route.rb中,您需要包括:id属性

人员/:id/编辑\u多个

所以在表单中,您需要包含个人id

请尝试以下代码以获取此路由{:controller=>“people”,:action=>“edit_multiple”}


你把单数和复数资源混为一谈。
edit\u multiple\u path
路由当前被配置为单一资源,这意味着它需要将单个
Person
作为参数传递。然而,根据定义,您试图在同一时间更新多个人–在这种情况下,使用单一路线是没有意义的

相反,请尝试以下路线:

这将使以下路线可用:

       update_multiple_invites POST   /invites/update_multiple/:people_ids(.:format) invites#update_multiple
编辑:

在“索引”视图中,您需要输出表单以便显示它们:

# app/views/people/index.html.erb
<%= form_tag edit_multiple_people_path do %>

# app/views/people/_edit_multiple.html.erb
<%= form_for :person, :url => update_multiple_people_path, :html => { :method => :put } do |f| %>
#app/views/people/index.html.erb
#app/views/people/_edit_multiple.html.erb
更新多人路径:html=>{:method=>:put}do | f |%>
请注意,
解释其中包含的所有内容,但不输出。您需要使用
,以便实际输出表单的内容


另外,不要忘记,您的partial需要扩展名
.erb
,以便解释Ruby代码。也许你已经相应地给它命名了,但是你的帖子描述了名称
edit\u multiple.html
,而没有
.erb

,你把单数和复数资源混为一谈了。
edit\u multiple\u path
路由当前被配置为单一资源,这意味着它需要将单个
Person
作为参数传递。然而,根据定义,您试图在同一时间更新多个人–在这种情况下,使用单一路线是没有意义的

相反,请尝试以下路线:

这将使以下路线可用:

       update_multiple_invites POST   /invites/update_multiple/:people_ids(.:format) invites#update_multiple
编辑:

在“索引”视图中,您需要输出表单以便显示它们:

# app/views/people/index.html.erb
<%= form_tag edit_multiple_people_path do %>

# app/views/people/_edit_multiple.html.erb
<%= form_for :person, :url => update_multiple_people_path, :html => { :method => :put } do |f| %>
#app/views/people/index.html.erb
#app/views/people/_edit_multiple.html.erb
更新多人路径:html=>{:method=>:put}do | f |%>
请注意,
解释其中包含的所有内容,但不输出。您需要使用
,以便实际输出表单的内容


另外,不要忘记,您的partial需要扩展名
.erb
,以便解释Ruby代码。也许你已经相应地给它命名了,但是你的帖子描述了名称
edit_multiple.html
而没有
.erb

当试图转到localhost:3000/人我刚刚得到:路由错误没有路由匹配{:controller=>“people”,:action=>“edit_multiple”}时,试着运行rake路由以获取有关可用路由的更多信息。所以我不能检查它。好的,如果你在Google Chrome上,打开
开发者工具
,检查
提交
操作上的
网络
选项卡。你说得对,404。我的Gemfile中有gem“jquery rails”。。。你能告诉我正确的方向以确保它正确集成吗?当尝试转到localhost:3000/人时,我刚刚得到:路由错误没有路由匹配{:controller=>“people”,:action=>“edit_multiple”}尝试运行rake路由以获取有关可用路由的更多信息。所以我不能检查它。好的,如果你在Google Chrome上,打开
开发者工具
,检查
提交
操作上的
网络
选项卡。你说得对,404。我的Gemfile中有gem“jquery rails”。。。你能告诉我正确的方向以确保它正确集成吗?我删除了:id,现在我得到了这个页面,但没有列出我之前添加的任何人。”在没有加载我的索引页面之前,它正在列出新的联系人,现在是,但是提交按钮没有显示,也没有显示记录。是的,我正在进行正确的操作@Emrys,索引页上显示了什么样的错误?没有显示错误。它只是没有让我看到里面的任何东西
# config/routes.rb
resources :people
    collection do
        post 'update_multiple/:people_ids', :action => 'update_multiple'
    end
end
       update_multiple_invites POST   /invites/update_multiple/:people_ids(.:format) invites#update_multiple
# app/views/people/index.html.erb
<%= form_tag edit_multiple_people_path do %>

# app/views/people/_edit_multiple.html.erb
<%= form_for :person, :url => update_multiple_people_path, :html => { :method => :put } do |f| %>