【问题标题】:Undefined method with “_path” while using simple_form_for使用 simple_form_for 时带有“_path”的未定义方法
【发布时间】:2016-07-26 09:26:30
【问题描述】:

我在使用 simple_form_for 时遇到路由问题。我知道这与复数有关,但相同的形式非常适合编辑/更新方法。

undefined method `companies_path'
Did you mean?  companys_path
               company_path

companys_controller

def new
    @company = Company.new
end

def create
    @company = Company.new(company_params)

    if @company.save
        redirect_to @company
    else
        render 'new'
    end

end

_form.html.haml

= simple_form_for @company do |f|
 = f.input :name
 = f.input :description
 = f.input :website

 = f.button :submit

耙路

    companys GET    /companys(.:format)          companys#index
             POST   /companys(.:format)          companys#create
 new_company GET    /companys/new(.:format)      companys#new
edit_company GET    /companys/:id/edit(.:format) companys#edit
     company GET    /companys/:id(.:format)      companys#show
             PATCH  /companys/:id(.:format)      companys#update
             PUT    /companys/:id(.:format)      companys#update
             DELETE /companys/:id(.:format)      companys#destroy

我想问题是,Edit/update 用于“companys_path”,而 new/create 用于“companies_path”。任何帮助表示赞赏。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4


    【解决方案1】:

    控制器名称应该是复数,所以在你的情况下它应该是companies_controller

    按照以下步骤进行更改

    • 将控制器重命名为companies_controller.rb
    • 将控制器类名改为

      class CompaniesController < ActionController::Base
        # controller code
      end
      
    • 更改routes.rb

      resources :companies
      

    编辑

    Controller naming conventions

    Greg在 cmets 中的链接

    【讨论】:

    • 但是,我的型号名称是“公司”,这不是问题吗?
    • 我说的不是型号而是控制器名称
    • Rails 使用一个名为Inflector 的类,它有一个标准英语复数形式的列表。 Rails 的命名约定是模型名称的单数和复数:表名称、控制器名称、视图文件夹名称(基于控制器名称)和助手名称。这在Rails Action Controller Overview中也有简要说明。
    【解决方案2】:

    首先,您应该遵循rails 命名约定并将您的控制器从companys_controller.rb 重命名为companies_controller.rb。 重命名后您的问题将得到解决。

    Simple form 假设您已遵循 Rails 命名约定并在 companies_path 提出请求,而 routes 中不存在该请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多