标签: rails-routing

使用Id以外的属性访问routes.rb中的资源

我的routes.rb中有以下内容

map.resources :novels do |novel|
  novel.resources :chapters
end
Run Code Online (Sandbox Code Playgroud)

通过上面定义的路由,我可以使用访问章节xxxxx.com/novels/:id/chapters/:id.但这不是我想要的,章节模型有另一个叫做数字的字段(对应章节编号).我想通过URL来访问每一章 xxxx.com/novels/:novel_id/chapters/:chapter_number.如何在不明确定义命名路由的情况下完成此操作?

现在我通过使用以下命名路径定义ABOVE map.resources:novels来做到这一点

map.chapter_no 'novels/:novel_id/chapters/:chapter_no', :controller => 'chapters', :action => 'show'
Run Code Online (Sandbox Code Playgroud)

谢谢.

ruby routes ruby-on-rails rails-routing

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

命名空间路由的默认资源?

使用Rails 3中的路由,使用命名空间路由,如下例所示......

namespace :admin do
    get 'dashboard' => 'dashboard#index'
end
Run Code Online (Sandbox Code Playgroud)

...如何让'/ admin'路由到'dashboard #index'以及'/ admin/dashboard'?最好的方法是定义......

get 'admin' => 'admin/dashboard#index'
Run Code Online (Sandbox Code Playgroud)

在命名空间之外还是有一种更优雅的方法来对资源进行别名?

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

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

究竟是rails"root"函数定义在哪里?

我在rails应用程序中看到如下内容:

Application.routes.draw do
    root :to => "accounts#index"
end
Run Code Online (Sandbox Code Playgroud)

我在这里被告知,如果"/"是要求的路径,这将定义rails路由到哪里.但是,在哪里,这是在rails代码中定义的'root'函数?我不明白为了让这个技巧发挥作用所涉及的范围问题.

我可以看到一个块正在传递给该draw函数.所以我假设draw函数调用yield执行传递的块.但是我仍然不确定为什么root函数会神奇地在传递块的范围内.

ruby scope ruby-on-rails rails-routing

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

在rails中制作漂亮的网址.将/ users /更改为数据库字段

现在,我的网址被渲染为

/users/2/products
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用friendly_id将其渲染为

/users/username/products
Run Code Online (Sandbox Code Playgroud)

但我不想那样.在我的数据库中User,有一个字段role,其条目如 - worker,janitor等等.所以,我想拥有

/users/2/products
Run Code Online (Sandbox Code Playgroud)

/worker/username/products or /janitor/username/products and so on..
Run Code Online (Sandbox Code Playgroud)

我该怎么做 ?我可以使用friendly_id来做吗?

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

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

你如何在 Rails 4 中实现一个虚拟的 link_to

好的,所以我只是将我的第一个项目从 Rails 3 迁移到 Rails 4,该项目正在开发中,因此某些链接仅用于内容。

在 Rails 3 中,我可以这样做:

link_to "To be added", {:controller => "#", :action => "#"}
Run Code Online (Sandbox Code Playgroud)

这会给我一个我可以设置样式等的虚拟链接。由于路由错误,这在 Rails 4 中不起作用:

No route matches {:action=>"#", :controller=>"#"}
Run Code Online (Sandbox Code Playgroud)

可能只是我目前睡眠不足,但我似乎无法找到解决此问题并实现相同功能的体面方法。

ruby-on-rails rails-routing link-to ruby-on-rails-4

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

开放式旅行计划可扩展性(或替代库)

我正在玩开放式旅行计划程序 novadays。实际上我会使用图书馆的一些部分,比如基本的公共交通功能,没有自行车、道路、街道等......功能。我只会提供到图书馆的巴士/地铁站、时间和路线信息。

据我了解,OTP 使用 Graph.obj 文件,该文件可以根据自定义路线和街道数据构建。当应用程序启动时,该进程将所有 Graph.obj 数据加载到内存中。

我关心的是;如果我有大量的路线数据,那么我可能需要从数据本身创建一个巨大的 Graph.obj 文件。然后进程会将所有数据加载到内存中,这会吃掉我所有的内存。

题; OTP 可扩展吗?有没有办法从数据库中提供源数据?或者已经在诸如 mySql、postgreSql 等数据库中实现的东西?我可以扩展我的应用程序的其他开源替代品是什么?

public dijkstra transport rails-routing gtfs

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

像狂欢一样在引擎中使用Rails URL和路径助手

我正在尝试在我的Rails 4引擎视图中使用一些URL和/或路径助手,例如resource_url或resource_path.这些引擎的配置与典型的可安装教程略有不同.实际上,如果没有Spree :: ENGINE_NAME命名空间,它们更像Spree的工作方式.

像Spree的架构一样,我正在尝试创建其他引擎所依赖的核心引擎.例如,我的后端引擎的routes.rb文件如下所示:

Core::Engine.add_routes do

    # Check to see if the request comes in on a subdomain
    # The Subdomains class passed into constraints()
    # is a class defined in lib/subdomain.rb
    constraints(Subdomain) do
      match '/manage' => "manage#index", :via => [:get]
    end

end
Run Code Online (Sandbox Code Playgroud)

在我的后端引擎内部的视图中,我希望能够使用一些URL /路径助手来执行以下操作:

<%= link_to manage_path, manage_path %>
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为我在核心引擎上绘制路线.所以,我必须使用

<%= link_to core_engine.manage_path, core_engine.manage_path %>
Run Code Online (Sandbox Code Playgroud)

狂欢不知何故绕过这个,但我不确定如何.例如,在backend/app/views/spree/admin/products/index.html.erb:

<%= link_to product.try(:name), edit_admin_product_path(product) %>
Run Code Online (Sandbox Code Playgroud)

请注意,edit_admin_product_path但实际上没有提到核心引擎. …

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

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

如何自定义rails中类名的单数化

我正在研究 Rails 4.1.0。我在我的应用程序中生成了leaves_controller 和 Leave 模型。

但是应用程序为叶子生成了路由,例如 new_leafe、edit_leaf 等。

实际上,我只希望将 Leave 的单数化字符串保留为 Leave,例如 new_leave_path、edit_leave_path。

如果有任何想法在 Rails 中将类名单一化,请分享。

ruby-on-rails rails-routing

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

Rails 4 + Devise:为经过身份验证的用户设置默认根路由

我做了一些研究,发现这个问题已经在不同的地方多次解决了:

我尝试按照上面链接中给出的示例进行操作,并在我的routes.rb文件中提出了以下解决方案:

root to: 'pages#home'

devise_for :users, :path => 'account', controllers: { registrations: "registrations", confirmations: "confirmations" }

authenticated :user do
  root 'calendars#index', as: :authenticated_root
end
Run Code Online (Sandbox Code Playgroud)

这里的目标是将unauthenticated用户引导到home网站的常规页面,而authenticated用户将转到他们的仪表板,在应用程序内,即calendars#index路线,在我的路线中定义如下:

calendars GET    /calendars(.:format)                        calendars#index
Run Code Online (Sandbox Code Playgroud)

但是,当我以用户身份登录并访问 时http://localhost:3000/,我一直登陆home网站的常规页面,而不是应用程序内的用户仪表板。

我究竟做错了什么?

authentication ruby-on-rails rails-routing devise ruby-on-rails-4

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

如何在Rails 3.1中将我的URL格式设置为username/controller /:id?

我希望它类似于Twitter处理其推文的URL的方式.

例如,现在我的URL看起来像这样:mydomain.com/feedbacks/1/,feedbacks控制器的名称在哪里.

我希望它看起来像:mydomain.com/username/feedbacks/1/类似于Twitter的:twitter.com/username/status/:id/.

routes.rb看起来像这样:

  resources :users do
      resources :feedbacks
  end
Run Code Online (Sandbox Code Playgroud)

当我这样的时候,它会给我URL mydomain.com/users/1/feedbacks,但我想要URL中的实际用户名.

我怎么做到的?

谢谢.

编辑1:如果您要为此问题添加另一个答案,请确保它针对已给出的答案解决我的意见/问题.否则它将是多余的.

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

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