我的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)
谢谢.
使用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)
在命名空间之外还是有一种更优雅的方法来对资源进行别名?
我在rails应用程序中看到如下内容:
Application.routes.draw do
root :to => "accounts#index"
end
Run Code Online (Sandbox Code Playgroud)
我在这里被告知,如果"/"是要求的路径,这将定义rails路由到哪里.但是,在哪里,这是在rails代码中定义的'root'函数?我不明白为了让这个技巧发挥作用所涉及的范围问题.
我可以看到一个块正在传递给该draw函数.所以我假设draw函数调用yield执行传递的块.但是我仍然不确定为什么root函数会神奇地在传递块的范围内.
现在,我的网址被渲染为
/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来做吗?
好的,所以我只是将我的第一个项目从 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)
可能只是我目前睡眠不足,但我似乎无法找到解决此问题并实现相同功能的体面方法。
我正在玩开放式旅行计划程序 novadays。实际上我会使用图书馆的一些部分,比如基本的公共交通功能,没有自行车、道路、街道等......功能。我只会提供到图书馆的巴士/地铁站、时间和路线信息。
据我了解,OTP 使用 Graph.obj 文件,该文件可以根据自定义路线和街道数据构建。当应用程序启动时,该进程将所有 Graph.obj 数据加载到内存中。
我关心的是;如果我有大量的路线数据,那么我可能需要从数据本身创建一个巨大的 Graph.obj 文件。然后进程会将所有数据加载到内存中,这会吃掉我所有的内存。
题; OTP 可扩展吗?有没有办法从数据库中提供源数据?或者已经在诸如 mySql、postgreSql 等数据库中实现的东西?我可以扩展我的应用程序的其他开源替代品是什么?
我正在尝试在我的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但实际上没有提到核心引擎. …
我正在研究 Rails 4.1.0。我在我的应用程序中生成了leaves_controller 和 Leave 模型。
但是应用程序为叶子生成了路由,例如 new_leafe、edit_leaf 等。
实际上,我只希望将 Leave 的单数化字符串保留为 Leave,例如 new_leave_path、edit_leave_path。
如果有任何想法在 Rails 中将类名单一化,请分享。
我做了一些研究,发现这个问题已经在不同的地方多次解决了:
我尝试按照上面链接中给出的示例进行操作,并在我的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
我希望它类似于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:如果您要为此问题添加另一个答案,请确保它针对已给出的答案解决我的意见/问题.否则它将是多余的.