为什么我不能将一个控制器的补丁方法路由到另一个导轨的 show 方法 5



我收到此错误消息:

没有与 [POST] "/users/9" 匹配的路由

我正在尝试找出一种方法来拥有一个控制器的更新方法,并在另一个控制器的 show 方法视图中使用它。这就是我的路由文件的样子。

路线.rb

Rails.application.routes.draw do
root 'dashboards#index' 
devise_for :users
resources :users, only: [:show] 
patch '/users/:id' => 'companyinfos#update'
put '/users/:id' => 'companyinfos#update'
resources :dashboards, only: [:index]
end

我通过用户控制器找到了正确的公司信息

users_controller.rb

class UsersController < ApplicationController
def show  
@user = User.find(params[:id])
@companyinfo = Companyinfo.find(current_user.id)
end
end

我说在我的company_info控制器中使用此方法

companyinfos_controller.rb

class CompanyinfosController < ApplicationController
def update
@companyinfo = Companyinfo.find(current_user.id)
if @companyinfo.update(companyinfo_params)
flash[:notice] = "Saved ..."
else
flash[:alert] = "cannot save"
end
render 'edit'
end
private
def companyinfo_params
params.require(:companyinfo).permit(:CompanyStage)
end

结束

最后,我正在使用form_for在users_path上更新它

显示.html.erb

<%= form_for :companyinfo do |f| %>
<%= f.text_field :CompanyStage %>
<%= f.submit "save", class: "btn btn-success" %>
<% end %>

当我通过 companyinfo/:id/edit 更新数据库中的信息时,更新数据库中的信息工作正常,但如果我尝试在另一个视图(例如 users/:id)上更新它,我会收到上面的错误消息。正确的方法是什么?

更新实际上,如果我只是按照错误消息告诉我的那样工作,它就可以工作。奇迹吧?另一个问题。有没有另一种方法可以让来自不同控制器的多个路由指向同一位置?或者这是最好的方法?

错误显示:没有匹配的路由 [POST]

更新路由:

post '/users/:id' => 'companyinfos#update'

或表单方法:

<%= form_for :companyinfo, method: :patch do |f| %>

最新更新