ROR中form_with报错undefined method `client_path'问题求助
问题原因
- 你给
form_with传入的model: @clientrecord是Client类的实例,Rails会自动按模型类名生成路由助手,默认找client_path/clients_path,但你的路由配置里只声明了get 'clients', to: 'clients#index'这一个clients相关路由,没有定义Client资源的update/create对应的REST路由,也没有匹配agency命名空间下clientmanagement操作的路由映射。 - 你当前表单是在
agency命名空间的clientmanagement控制器下使用,Rails默认生成的非命名空间路由自然不存在。
解决方案
根据你的业务需求二选一即可:
方案1:表单提交到agency命名空间下的clientmanagement对应动作
如果希望表单提交到Agency::ClientmanagementController的update/create方法,按以下步骤修改:
- 先修改路由配置,给clientmanagement资源补上update动作:
namespace :agency do resources :clientmanagement, only: [:show,:new, :create, :edit, :update] resources :team, only: [:index, :show,:new, :create, :edit] end
- 修改form_with代码,手动指定提交规则,你可以选任意一种写法:
- 仅适配编辑场景:
<%= form_with model: @clientrecord, url: agency_clientmanagement_path(@clientrecord), method: :patch do |f| %>- 同时兼容新增+编辑场景:
<%= form_with model: @clientrecord, url: @clientrecord.new_record? ? agency_clientmanagement_index_path : agency_clientmanagement_path(@clientrecord), method: @clientrecord.new_record? ? :post : :patch do |f| %>- 自动识别场景的简化写法:
<%= form_with model: [:agency, :clientmanagement, @clientrecord] do |f| %>
方案2:表单提交到根命名空间下的Clients控制器
如果你本来就是要提交到全局的ClientsController,直接在路由里声明完整的Clients资源即可,不需要修改form_with代码:
resources :clients
内容的提问来源于stack exchange,提问作者NoYellAtmonkeys
相关产品推荐
相关产品推荐

