如何为Rails中的模型不执行任何操作的控制器创建路由?

时间:2012-06-18 17:48:10

标签: ruby-on-rails-3 routes

对于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)之外

提前致谢!

1 个答案:

答案 0 :(得分:1)

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

一样完成
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,例如。因此,如果您想要将路径直接指向主机,则需要在路线中提供自定义匹配器,就像您在示例中所做的那样。