Tag: 路由

将表单路由到Ruby on Rails中的新控制器操作

我对Ruby on Rails相对较新,我正在尝试在现有控制器上设置一个带有新操作的表单。 我现有的模型和控制器称为“项目”,我在控制器中创建了一个名为“queue”的新操作。 目标是用户可以使用“/ queue / username”过滤不同用户的项目。 的routes.rb match ‘queue/:username’ => ‘projects#queue’ projects_controller.rb def queue if (params[:user_id].blank? && params[:user_id].nil?) @projects = Project.find_all_by_user_id(User.where(:username => params[:username]).pluck(:id)) else @projects = Project.find_all_by_user_id(params[:user_id]) end end queue.html.erb “select_user”, :method => “post”) do %> ‘Enter a user…’, class: “users”, data: {autocomplete_source: User.order(:lastname, :firstname).map { |u| {:label => u.firstname + ” ” […]

确定路径是否作为Rails控制器中的路由存在

我想知道是否可以将任意路径映射到路由 recogn_request_for完成了我想要的东西,但我不能让它在我的控制器中工作。 具体来说, 我如何执行recogn_request_for或从我的控制器执行相同任务的东西?

嵌套命名空间路由转向错误的控制器

使用Rails 3.0.7,我正在为我们的应用程序创建一个API,我有这个设置: 的routes.rb namespace :api do namespace :v1 do match “connect” => “users#login”, :via => :post match “disconnect” => “users#logout”, :via => :post resources :users match “users/:id/foos” => “foos#list”, :via => :get match “users/:id” => “users#update”, :via => :put match “foos/:id/bars” => “bars#list_by_foo”, :via => :get match “foos/:id” => “foos#show”, :via => :get, :constraints => […]

覆盖嵌套路径中的参数

我希望在路由的命名约定方面保持一致。 默认参数是:id任何资源的:id 。 但是,如果在其中嵌套另一个资源,父资源的参数将更改为:parent_id 。 我的路由看起来像: resources :users do resources :projects do resources :issues end end 对于用户模型,它将生成url,如:id ,对于项目url将为:user_id/:id ,对于问题,url将为:user_id/:project_id/:id 。 我试图在此之后重载默认参数 resources :users, param: :user_id do resources :projects, param: :project_id do resources :issues, param: :issue_id end end 它生成的URL类似于:: :user_user_id/:project_project_id/:issue_id 。 由于我重写它,我希望父资源的默认附加是关闭的。 我希望我的路由看起来像:user_id/:project_id/:issue_id ,我希望它对所有模型都是一致的。 即项目应映射到:user_id/:project_id 。

在Rails 3中没有尾随斜杠的情况下重定向到规范路由

在Rails 3上,我正在尝试从没有尾部斜杠的URL重定向到具有斜杠的规范URL。 match “/test”, :to => redirect(“/test/”) 但是,上面的路由匹配/ test和/ test /导致重定向循环。 如何使其仅匹配没有斜杠的版本?

Rails:没有复数的路由给出了奇怪的帮助

我正在使用此设置获得一个奇怪的命名助手: 在config / routes.rb中我有: Qtl::Application.routes.draw do resources :qtl_table do collection do get ‘search’ end end … end rake routes输出: search_qtl_table_index GET /qtl_table/search(.:format) {:action=>”search”, :controller=>”qtl_table”} qtl_table_index GET /qtl_table(.:format) {:action=>”index”, :controller=>”qtl_table”} POST /qtl_table(.:format) {:action=>”create”, :controller=>”qtl_table”} new_qtl_table GET /qtl_table/new(.:format) {:action=>”new”, :controller=>”qtl_table”} edit_qtl_table GET /qtl_table/:id/edit(.:format) {:action=>”edit”, :controller=>”qtl_table”} qtl_table GET /qtl_table/:id(.:format) {:action=>”show”, :controller=>”qtl_table”} PUT /qtl_table/:id(.:format) {:action=>”update”, :controller=>”qtl_table”} DELETE /qtl_table/:id(.:format) {:action=>”destroy”, […]

iFrame中的RoutingError

当我在我的视图中放置一个iFrame时,我搭建了一个测试应用程序并遇到了路由错误: 这是我添加iFrame的节目模板: 意见/酒吧/ show.html.erb: Body: | 我正在调用这样的页面: http://localhost:3000/bars/1 页面显示正确。 但页面内的iFrame说明了这一点: Routing Error No route matches “/bars/%E2%80%9Chttp://www.yahoo.com%E2%80%9D” with {:method=>:get} 我没有对默认值中的routes.rb做任何更改: ActionController::Routing::Routes.draw do |map| map.resources :bars map.connect ‘:controller/:action/:id’ map.connect ‘:controller/:action/:id.:format’ end

在加载*路由后运行*的Rails初始化程序?

我想在我的Rails应用程序启动时设置一个类属性。 它需要检查一些路由,因此需要在我的自定义代码运行之前加载路由。 我无法找到一个可靠的地方。 这在“测试”环境中完美地工作: config.after_initialize do Rails.logger.info “#{Rails.application.routes.routes.map(&:path)}” end 但它在“开发”环境中不起作用(路线是空的) 现在,我似乎通过在config.to_prepare运行相同的代码来使开发模式中的东西工作,我理解在每个请求之前发生。 不幸的是,单独使用to_prepare似乎不能在测试模式下工作,因此重复。 我很好奇为什么在测试模式中after_initialize之前加载路由,而不是在开发模式下。 真的,这个最好的钩子是什么? 是否有一个适用于所有环境的钩子? *编辑* 穆的建议重新加载路线很棒。 它使我能够在所有环境中对after_initialize内的路径进行一致的访问。 但是对于我的用例,我认为我仍然需要运行to_prepare中的代码,因为我在模型上设置了一个类属性,并且在每个请求之前重新加载模型。 所以这就是我最终做的事情。 [:after_initialize, :to_prepare].each do |hook| config.send(hook) do User.invalid_usernames += Rails.application.routes.routes.map(&:path).join(“\n”).scan(/\s\/(\w+)/).flatten.compact.uniq end end 这对我来说似乎有些混乱。 我想我宁愿这样做: config.after_initialize do User.exclude_routes_from_usernames! end config.to_prepare do User.exclude_routes_from_usernames! end 但我不确定User是否是正确检查Rails.application.routes地方。 我想我可以用lib /中的代码做同样的事情,但我不确定这是否正确。 另一种选择是在to_prepare上应用mu的建议。 这样可行,但在我的开发环境中,每次请求都重新加载路由似乎有明显的延迟,所以我不确定这是否是一个好的呼叫,尽管它至少是干的。 config.to_prepare do Rails.application.reload_routes! User.invalid_usernames += Rails.application.routes.routes.map(&:path).join(“\n”).scan(/\s\/(\w+)/).flatten.compact.uniq end

在Ruby on Rails应用程序中访问用户页面时,为什么一直出现路由错误?

我试图在michael hartl railstutorial的https://github.com/railstutorial/sample_app_2nd_ed中找到微博的注释。 似乎如果用户没有制作微博,则没有问题,我可以访问他们的页面。 但是,如果他们有路由错误。 这是我的问题。 这是我的routes.rb文件中的问题区域。 resources :microposts, only: [:create, :destroy] do resources :comments, end 这是我尝试访问用户页面时遇到的错误(localhost:3000 / users / 2): Started GET “/users/2” for 127.0.0.1 at 2012-05-21 21:32:47 -0700 Processing by UsersController#show as HTML Parameters: {“id”=>”2”} User Load (0.3ms) SELECT “users”.* FROM “users” WHERE “users”.”id” = ? LIMIT 1 [[“id”, “2”]] User Load (0.2ms) […]

Rails RSpec路由:测试操作:除了不路由

相当简单的问题(我想过),但我遇到了一些问题: 在Rails 3.1.0.rc6 / RSpec 2.6.0中,我正在尝试测试我的’产品’资源的路由,如下所示: resources :products, :except => [:edit, :update] 有效操作的路由有效,但我想确保编辑和更新路由不可调用。 这是我正在尝试的: it “does not route to #edit” do lambda { get(“/products/1/edit”) }.should raise_error end 失败/错误:lambda {get(“/ products / 1 / edit”)}。应该是raise_error预期exception但没有引发任何内容#。/ spec /routing / products_routing_spec.rb:11:在`block(3 levels)in’ ……然而,当我跑的时候 it “does not route to #edit” do get(“/products/1/edit”).should_not route_to(“products#edit”, :id => “1”) end 我明白了 失败/错误:get(“/ […]