创建类似于index.html.erb的自定义视图

时间:2012-01-01 17:08:57

标签: ruby-on-rails views

我正在创建一个自定义视图,只是对index.html.erb进行了轻微修改。我希望能够在我的网络应用上创建一个链接,引导用户访问名为list.html.erb的自定义视图。

这就是我所做的:

1)复制默认的脚手架索引视图并将其重命名为list.html.erb
2)通过复制GalleriesController方法并重命名为index来修改list

def list
 @galleries = Gallery.all

 respond_to do |format|
   format.html # index.html.erb
   format.xml  { render :xml => @galleries }
 end
end 

3)修改后的routes.rb文件如下:

match "galleries/list" => "galleries#list"

我一直收到以下错误:

Couldn't find Gallery with ID=list
Rails.root: /Users/scervera/Sites/MDN

Application Trace | Framework Trace | Full Trace
app/controllers/galleries_controller.rb:28:in `show'

在我对stackoverflow的搜索中,我无法找到任何类似的问题。

2 个答案:

答案 0 :(得分:5)

我猜你把match置于图库resources路线之外和之后。

这意味着list被解释为默认RESTful映射的:id

选项包括:

  1. 只使用index,除非你真的需要它们(这看起来很奇怪)。
  2. 按照here所述添加list RESTful操作(见下文)。
  3. 更改路由的顺序和/或使用约束以避免路由重叠。 IMO这是最脆弱,最不可取的。
  4. 添加list操作(选项2):

    resources :galleries do
      get 'list', :on => :collection
    end
    

答案 1 :(得分:1)

您应该将galleries/list路线放在所有其他画廊路线之前。

订单很重要。在您的情况下,路由“galleries /:id”首先匹配并导致此错误。

您可以在此处获取有关Rails路由的详尽信息:Rails Routing from the Outside In