【问题标题】:Rails routing url name helpersRails 路由 url 名称助手
【发布时间】:2011-11-30 04:55:58
【问题描述】:

需要哪些基本设置才能确保路由 url 名称助手正常工作?

例如,在我的路线中,我有以下内容:

Blog::Application.routes.draw do
  resources :news, :as => :news_items, :controller => :news_items, :only => [:show, :index]

  scope :module => "refinery" do
    scope(:path => 'refinery', :as => 'admin', :module => 'Admin') do
      resources :news, :except => :show, :as => :news_items, :controller => :news_items
    end
  end
end

但以下似乎不起作用:

new_refinery_news_url

我不断收到错误

未定义的局部变量或方法`new_refinery_news_url'

所以我很确定我在配置我的应用程序的方式中缺少某些东西,谁的主要路由在 Gemfile 中添加的 RefineryCMS gem 中。

有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails routing refinerycms


    【解决方案1】:

    不得不改用main_app.new_refinery_news_url

    【讨论】:

      【解决方案2】:

      助手名称将为new_admin_news_item_url

      查找所有路由及其辅助方法很简单。只需运行rake routes,您就会看到:

                news_items GET    /news(.:format)                   {:action=>"index", :controller=>"news_items"}
                 news_item GET    /news/:id(.:format)               {:action=>"show", :controller=>"news_items"}
          admin_news_items GET    /refinery/news(.:format)          {:action=>"index", :controller=>"refinery/Admin/news_items"}
                           POST   /refinery/news(.:format)          {:action=>"create", :controller=>"refinery/Admin/news_items"}
       new_admin_news_item GET    /refinery/news/new(.:format)      {:action=>"new", :controller=>"refinery/Admin/news_items"}
      edit_admin_news_item GET    /refinery/news/:id/edit(.:format) {:action=>"edit", :controller=>"refinery/Admin/news_items"}
           admin_news_item PUT    /refinery/news/:id(.:format)      {:action=>"update", :controller=>"refinery/Admin/news_items"}
                           DELETE /refinery/news/:id(.:format)      {:action=>"destroy", :controller=>"refinery/Admin/news_items"}
      

      【讨论】:

      • 就是这样,来自rake routes 的所有路由都不起作用。绕过这个问题的唯一方法是直接使用'/refinery/news/new',就像<%= link_to t('.create'), '/refinery/news/new' , :class => "add_icon" %>
      【解决方案3】:

      对于可挂载引擎,您始终需要指定“main_app”。 (或 Refinery 路由“refinery.”)前缀,因为引擎与应用程序是隔离的。

      【讨论】:

        【解决方案4】:

        如果您在炼油厂之外使用路由,一个解决方案是在 named_pa​​th 前面加上包含命名路由方法的 Rails 对象

        Rails.application.routes.url_helpers.new_admin_news_item_path
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多