我遵循了一个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”作为标题(我将在以后单独添加不同的功能) )。
在index.html.erb的表格上方,我写道:
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中)我做了。有没有人有任何其他建议或看到我做错了什么?
答案 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 %>
现在,您可以更进一步,将整个表格提取为部分表格。