缺少模板创建新视图Rails

时间:2016-02-15 14:28:16

标签: html ruby-on-rails ruby ruby-on-rails-3

我遵循了一个rails教程here,您可以创建一个简单的博客作为rails的介绍。现在,我想添加另一页,但我遇到了一些麻烦。

所以,我有一个页面列出了位于apps \ view \ articles \ index.html.erb中的所有博客文章。代码如下所示:

<table>
  <tr>
    <th>Title</th>
    <th>Preview</th>
    <th colspan="3"></th>
  </tr>

  <% @articles.each do |article| %>
    <tr>
      <td><%= article.title %></td>
      <td><%= article.text[0,20] %></td>
      <td><%= link_to 'Read more...', article_path(article) %></td>
    </tr>
  <% end %>
</table>

现在,我想在该页面上添加一个名为“Backend”的链接,该链接与上面代码中的页面完全相同,只是它有“Backend”作为标题(我将在以后单独添加不同的功能) )。

  1. 在index.html.erb的表格上方,我写道:

  2. 在app \ views \ articles中,我创建了一个backend.html.erb文件,该文件与index.html.erb文件完全相同。
  3. 3.在app \ helpers中,我使用以下代码创建了一个backend_helper.rb:

    module BackendHelper
    end
    

    4.在app \ controllers中,我在教程中创建了一个Articles控件的副本,除了我将类更改为:

    class BackendController < ApplicationController
    

    5.在我的routes.rb文件中,我添加了一个get for backend:

      root 'welcome#index'
    
        resources :articles do
            root 'articles#index'
        end
    
        resources :articles do
            resources :comments
        end
    get 'backend', to: 'backend#index'
    

    问题:
    现在,当我点击链接时,我收到以下错误:

    Missing template backend/index, application/index with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. Searched in: * "C:/tutorialpath/app/views"
    

    我读到了类似的问题here,但似乎答案是在app / views文件夹中创建一个新的html.erb文件(对于这个项目,它在apps / views / articles中)我做了。有没有人有任何其他建议或看到我做错了什么?

2 个答案:

答案 0 :(得分:1)

如果要路由到后端#index(您在index中调用BackendController方法),则html.erb文件需要index.html.erb backend } folder:backend/index.html.erb

答案 1 :(得分:1)

您可以显式从控制器中呈现任何视图,如下所示:

class BackendController
  def index
   @articles = Article.all
   render 'articles/index'
  end
end

而不是寻找controller/action.{format}.[erb|slim|haml|jbuilder]的Rails 隐式呈现。所以在这种情况下backend/index.html.erb

但是,在这种情况下,您可能希望使用单独的视图并使用partials来提取可重用的块。

应用程序/视图/ acticles / _article.html.erb:

<tr>
  <td><%= article.title %></td>
  <td><%= article.text[0,20] %></td>
  <td><%= link_to 'Read more...', article_path(article) %></td>
</tr>

请注意,文件名以下划线开头,表示该文件是部分文件,而不是完整视图。

应用程序/视图/ acticles / index.html.erb:

<table>
  <tr>
    <th>Title</th>
    <th>Preview</th>
    <th colspan="3"></th>
  </tr>
  <%= render @articles %>
</table>

应用程序/视图/后端/ index.html.erb:

<table>
  <tr>
    <th>Title</th>
    <th>Preview</th>
    <th colspan="3"></th>
  </tr>
  <%= render @articles %>
</table>

<%= render @articles %>循环播放文章并渲染每个部分 - 魔法!它相当于:

<% @articles.each do |a| %>
  <%= render partial: 'articles/article', article: a %>
<% end %>

现在,您可以更进一步,将整个表格提取为部分表格。