【问题标题】:How to prevent pluralization of a model in Rails?如何防止 Rails 中模型的多元化?
【发布时间】:2011-01-17 09:52:51
【问题描述】:

我有一个名为 Search 的模型和一个名为 :search 的资源。我想将我的控制器命名为SearchController,而不是SearchesController。但是当我初始化一个 Search 实例时,Rails 假定它的路由必须是“/searches”。

我能做些什么来阻止这种情况吗?

【问题讨论】:

    标签: ruby-on-rails-3 routes


    【解决方案1】:

    这应该可行:

    resources :search, :as => :searches

    路由 url 以/search 开头,指向search 控制器并使用默认命名约定:

       searches GET    /search(.:format)          {:controller=>"search", :action=>"index"}
                POST   /search(.:format)          {:controller=>"search", :action=>"create"}
     new_search GET    /search/new(.:format)      {:controller=>"search", :action=>"new"}
    edit_search GET    /search/:id/edit(.:format) {:controller=>"search", :action=>"edit"}
         search GET    /search/:id(.:format)      {:controller=>"search", :action=>"show"}
                PUT    /search/:id(.:format)      {:controller=>"search", :action=>"update"}
                DELETE /search/:id(.:format)      {:controller=>"search", :action=>"destroy"}
    

    错误的原因是当表单只能访问模型实例时,它会尝试根据复数模型名称查找路由助手。在这种情况下,它尝试使用searches_path。如果我们保留默认路由名称并仅更改 url 和控制器,事情应该会奏效。

    Relevant documentation(在“依赖命名路由”下)

    【讨论】:

    • 是的,这就是我的路线文件中的内容。问题是它不起作用。由于“找不到路由 '/searches'”,传递给表单的 Search 实例失败。
    猜你喜欢
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多