我正在开发一个可安装的引擎,用于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
我的应用程序曾经在foo.tld上运行,但现在它在bar.tld上运行.请求仍然会出现在foo.tld中,我想将它们重定向到bar.tld.
如何在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将无法工作,但我无法找到它是如何完成的.
我有一个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文件的顶部有这个规则.
我有一个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
我有三个角色: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
我在rails路由中有以下url结构:
match '/financial-dictionary/:letter' => 'learning_center#dictionary', :as => :lc_dictionary
Run Code Online (Sandbox Code Playgroud)
我在"金融词典"面前需要一个领先的斜杠吗?如果我将其删除会发生什么?
我正在开发一个主要用作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文件,但我不确定该规范的放置位置. …
我改变了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)