对于Rails来说还是一个新手,所以如果我采取完全错误的方法,请随意把我拉出来。
如何让routes.rb知道有一个根控制器充满了不操纵模型的动作,同时保留了路径助手方法?我希望它回应这样的请求:
http://localhost/download
http://localhost/share
使用像
这样的路线助手download_app_path
share_path
但没有像这样的静态命名路线:
match '/download' => 'site#download', :as => :download_app
match '/share' => 'site#share', :as => :share
来自SiteController的,它不会从我的应用程序创建,显示或以其他方式操纵模型。
我尝试过使用这样的方法,但它可以在不生成路径助手的情况下工作(自然)
match '/:action', :controller => 'site'
理论上我可以不使用路由助手,但我认为它们比将URL选项的哈希值传递给link_to或表单方法更容易阅读。
有没有办法完成一个更有资源的根控制器,或者我正在尝试为Rails做非常规的?
修改
为清楚起见,这是SiteController类的样子:
class SiteController < ApplicationController
def download
@custom_options = { .. }
end
def share
@custom_options = { .. }
end
def about
end
end
其目的是允许我将不与资源交互的页面(例如用户或友谊)收集到一个控制器中并将它们全部保存在一个位置。我正在尝试将此控制器设置为应用程序根控制器 - 因此来自此控制器的所有路径将直接在应用程序主机(myapp.com/download)之外
提前致谢!
答案 0 :(得分:1)
路线和资源与模型无关。它只是一个RESTful约定。如果您只想使用索引操作,则在您的示例中download
和share
可以像
resouce :download, only: [:index]
resouce :share, only: [:index]
查看指南http://guides.rubyonrails.org/routing.html
中的所有示例如果您想将下载和共享功能添加到某些&#34;资源&#34;比如,说一张图片,然后你会做类似的事情:
resources :pictures do
get 'download', :on => :member
get 'share', :on => :member
end
资源始终具有端点/pictures
,例如。因此,如果您想要将路径直接指向主机,则需要在路线中提供自定义匹配器,就像您在示例中所做的那样。