【问题标题】:Creating custom view similar to index.html.erb创建类似于 index.html.erb 的自定义视图
【发布时间】:2012-01-01 17:08:57
【问题描述】:

我正在创建一个自定义视图,它是对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 的搜索中,我找不到任何类似的问题。

【问题讨论】:

    标签: ruby-on-rails views


    【解决方案1】:

    我猜你把match 放在了resources 路由之外和之后。

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

    选项包括:

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

    添加list 操作(选项2):

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

    【讨论】:

    • 谢谢,我想我会尝试选项 2,因为它比更改路由顺序更脆弱。关于此选项的另一个问题:是否需要在“resources :galleries do”块中列出画廊的所有操作?
    • @SteveCervera 不;默认路由仍然存在。
    • 没关系。我从您提供的链接中看到,没有必要为每个现有操作创建一个 RESTful 操作。仅适用于我的客户。谢谢
    【解决方案2】:

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

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

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

    【讨论】:

    • 更改顺序修复了它。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 2011-05-24
    相关资源
    最近更新 更多