0

对 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 或 form 方法更容易阅读。

有没有办法完成一个更足智多谋的根控制器,或者我正在尝试为 Rails 做非常规的事情?

编辑

为清楚起见,下面是这个 SiteController 类的样子:

class SiteController < ApplicationController
  def download
    @custom_options = { .. }
  end
  def share
    @custom_options = { .. }
  end
  def about
  end
end

它的目的是允许我将不与资源(例如用户或友谊)交互的页面收集到单个控制器中,并将它们全部保存在一个地方。我正在尝试将此控制器设置为应用程序根控制器 - 因此来自此控制器的所有路径都将直接离开应用程序主机( myapp.com/download )

提前致谢!

4

1 回答 1

1

路线和资源与模型无关。这只是一个 RESTful 约定。如果您只想使用索引操作,在您的示例中downloadshare可以这样做

resouce :download, only: [:index]
resouce :share, only: [:index]

查看指南中的所有示例http://guides.rubyonrails.org/routing.html

如果您想将下载和共享功能添加到某些“资源”,例如图片,那么您可以执行以下操作:

resources :pictures do
  get 'download', :on => :member
  get 'share', :on => :member
end

例如,资源始终具有端点/pictures。因此,如果您想拥有直接到主机的路径,那么您需要像在示例中那样在路由中提供自定义匹配器。

于 2012-06-18T17:59:35.893 回答