标签: rails-routing

为可安装的Rails 3.1引擎列出'rake routes'

我正在开发一个可安装的引擎,用于Rails 3.1,我想列出引擎的路由.

我用以下方法创建了引擎:

$ rails plugin new rails_blog_engine --mountable
Run Code Online (Sandbox Code Playgroud)

编辑'test/dummy/config/routes'文件阅读:

Rails.application.routes.draw do
  mount RailsBlogEngine::Engine => "/blog"
end
Run Code Online (Sandbox Code Playgroud)

...和'config/routes'读取:

RailsBlogEngine::Engine.routes.draw do
  resources :posts
end
Run Code Online (Sandbox Code Playgroud)

我想列出为':posts'生成的路线,但目前尚不清楚我是如何做到这一点的.当我运行'rake app:routes'时,我只获得"/ blog"路线:

$ rake app:routes
rails_blog_engine    /blog    {:to=>RailsBlogEngine::Engine}
Run Code Online (Sandbox Code Playgroud)

当我运行'rake routes'时,我收到一个错误:

$ rake routes
rake aborted!
Don't know how to build task 'routes'
Run Code Online (Sandbox Code Playgroud)

我怎样才能看到':posts'的路线?我可以不重写相关的rake任务吗?

routes ruby-on-rails rails-routing rails-engines ruby-on-rails-3.1

21
推荐指数
2
解决办法
7601
查看次数

如何使用Rails路由从一个域重定向到另一个域?

我的应用程序曾经在foo.tld上运行,但现在它在bar.tld上运行.请求仍然会出现在foo.tld中,我想将它们重定向到bar.tld.

如何在rails路由中执行此操作?

routing ruby-on-rails rails-routing

20
推荐指数
4
解决办法
1万
查看次数

Ruby on Rails:根据路径获取控制器和操作名称

我试图根据路径获取控制器和操作名称.我有一条路线:

map.resources :permissions
Run Code Online (Sandbox Code Playgroud)

我以为我可以用:

ActionController::Routing::Routes.recognize_path "/permissions/1"
Run Code Online (Sandbox Code Playgroud)

得到像这样的哈希:

{ :controller => "permissions", :action => "show" }
Run Code Online (Sandbox Code Playgroud)

回来的实际哈希是:

{ :controller => "permissions", :action => "1" }
Run Code Online (Sandbox Code Playgroud)

如何获取正确的操作名称而不仅仅是我传入的ID?调度员必须能够以某种方式获得它,否则Rails将无法工作,但我无法找到它是如何完成的.

ruby-on-rails rails-routing

19
推荐指数
3
解决办法
1万
查看次数

如何创建Rails 3路由以匹配所有请求并指向一个资源/页面?

我有一个rails应用程序(Rails 3.0),我需要暂时停止服务.虽然这有效,但我想创建一个新路由,将所有请求定向到单个静态内容.我有一个控制器设置为我的静态页面提供服务.

我试过这样的事情:

match '*' => 'content#holding'
Run Code Online (Sandbox Code Playgroud)

match '*/*' => 'content#holding'
Run Code Online (Sandbox Code Playgroud)

匹配这里描述的通配符路由:Rails 3路由通配没有成功.

这可能是一个非常简单的答案,但我无法理解.

/ 编辑 /忘了提到我确实在我的routes.rb文件的顶部有这个规则.

ruby rails-routing ruby-on-rails-3

19
推荐指数
1
解决办法
1万
查看次数

Rails路由:仅包含自定义操作的资源

我有一个NotificationsController,我只有行动clear.

我想通过POST/notifications/clear来访问此操作

所以我在路由器中写了这个:

  resources :notifications, :only => [] do
    collection do
      post :clear
    end
  end
Run Code Online (Sandbox Code Playgroud)

有没有更清洁的方法来实现这一目标?我想

  scope :notifications do
    post :clear
  end
Run Code Online (Sandbox Code Playgroud)

会这样做,但我有一个missing controller错误,因为 - 我认为 - 它寻找clear控制器.

ruby-on-rails rails-routing ruby-on-rails-3 restful-architecture

18
推荐指数
1
解决办法
1万
查看次数

Rails路由基于条件

我有三个角色:Instuctor,Student,Admin,每个角色都有一个带有"home"视图的控制器.

所以这很好,

get "instructor/home", :to => "instructor#home"
get "student/home", :to => "student#home"
get "admin/home", :to => "admin#home"
Run Code Online (Sandbox Code Playgroud)

我想写一个类似于下面的虚荣网址,它会根据user_id正确的主页的角色进行路由.

get "/:user_id/home", :to => "instructor#home" or "student#home" or "admin#home"
Run Code Online (Sandbox Code Playgroud)

我该如何做到这一点?

routes ruby-on-rails rails-routing ruby-on-rails-3 ruby-on-rails-3.2

17
推荐指数
2
解决办法
1万
查看次数

有什么区别:new,:collection和:成员路线?

我已经阅读了文档,但我仍然不确定我是否了解所有内容.

特别是为什么有一个:new参数.据我了解,它可以用:collection参数替换.

那么这三种路线之间的区别是什么?

ruby-on-rails rails-routing

16
推荐指数
2
解决办法
7922
查看次数

我是否需要在铁路线前设置斜线

我在rails路由中有以下url结构:

match '/financial-dictionary/:letter' => 'learning_center#dictionary', :as => :lc_dictionary
Run Code Online (Sandbox Code Playgroud)

我在"金融词典"面前需要一个领先的斜杠吗?如果我将其删除会发生什么?

ruby ruby-on-rails rails-routing ruby-on-rails-3

16
推荐指数
1
解决办法
1160
查看次数

如何使用rspec测试路径约束

我正在开发一个主要用作API的应用程序(除了一些次要视图,例如会话/注册,这将是"标准").我喜欢在Railscast#350中最终确定的方法:对API进行版本控制,然后遵循它.我的路线看起来像:

namespace :api, :defaults => {:format => 'json'} do
  scope :module => :v1, :constraints => ApiConstraints.new(:version => 1, :default => false) do
    resources :posts, :only => [:create, :show, :destroy, :index]
  end

  scope :module => :v2, :constraints => ApiConstraints.new(:version => 2, :default => true) do
    resources :posts, :only => [:create, :show, :destroy, :index]
  end
end
Run Code Online (Sandbox Code Playgroud)

在每个路径中,我的Constraint是一个新的ApiConstraints对象,它位于我的./lib文件夹中.这个类看起来像这样:

class ApiConstraints
  def initialize(options)
    @version = options[:version]
    @default = options[:default]
  end

  def matches?(req)
    @default || req.headers['Accept'].include?("application/vnd.MYAPP.v#{@version}")
  end
end
Run Code Online (Sandbox Code Playgroud)

现在,手动测试时,一切都按预期工作.在我的API中,每个版本可能有5到10个控制器,并且不希望测试API约束适用于每个单独的控制器,因为这没有意义.我正在寻找一个测试我的API约束的spec文件,但我不确定该规范的放置位置. …

ruby-on-rails constraints rails-routing ruby-on-rails-3

16
推荐指数
1
解决办法
5636
查看次数

如何更改路由名称rails 4

我改变了posts#index匹配的路由,blog现在我进入/blog了我想要完成的URL.

我已经尝试了几个不同的东西来获取我的实际博客文章,其中路线目前看起来/posts/this-is-a-test也像使用blog而不是posts在URL中.
以下是我当前的路线文件.我正在使用friendly_id宝石,如果这对回答这个问题有任何不同.

resources :posts do
  resources :comments
end

  resources :contacts, only: [:new, :create]

  root "pages#home"

  get "/home", to: "pages#home", as: "home"
  get "about" => 'pages#about'
  get "pricing" => 'pages#pricing'
  get "contact_us" => 'pages#contact_us'
  match 'blog', to: 'posts#index', via: :all
end 
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails rails-routing ruby-on-rails-4

16
推荐指数
1
解决办法
2万
查看次数