我创建了一个用于创建文章的表单,但我只能在索引页面上看到已发布的文章,而且,我无法看到单独的文章。
每次我点击索引上单个文章的“显示”时,它都会打开一个空白页面,其网址为localhost:3000/articles.1
,而不是localhost:3000/articles/1
。
我不知道代码有什么问题,它类似于我作为管理员创建和编辑文章的代码,它在那里工作,但我一直收到这个错误。
以下是代码:
视图/文章/ show.html.erb:
<h1><%= @article.name %></h1>
<%= @article.content %>
<%= image_tag @article.photo.url(:small) %>
<p>Tags: <%= raw article.tag_list.map { |t| link_to t, tag_path(t) }.join(', ') %></p>
<%= link_to 'Back', noticias_path %>
视图/文章/ index.html.erb:
<% @articles.each do |article| %>
<div>
<h2><%= article.name %></h2>
<%= article.content %>
<p><%= link_to 'Show', noticias_path(article) %></p>
<p>Tags: <%= raw article.tag_list.map { |t| link_to t, tag_path(t) }.join(', ') %></p>
</div>
<% end %>
articles_controller.rb:
# GET /articles/1
# GET /articles/1.json
def show
@article = Article.find(params[:id])
end
routes.rb中:
Blog::Application.routes.draw do
root to: 'welcome#index'
get 'tags/:tag', to: 'noticias#index', as: :tag
get "noticias/index"
get "dashboard/index"
get "/sitemap" => "sitemap#index", :as => :sitemap, :defaults => {:format => :xml}
match '/noticias', to: 'noticias#index', via: 'get'
get 'login', to: 'sessions#new', as: 'login'
get 'logout', to: 'sessions#destroy', as: 'logout'
resources :users
resources :sessions
namespace :admin do
get '', to: 'dashboard#index', as: '/'
resources :noticias
end
end
答案 0 :(得分:1)
noticias_path
更是一个问题,请考虑使用rake routes
验证您的路线,但我认为将noticias_path
更改为noticia_path
,可以修复它。
答案 1 :(得分:0)
根据您的路线文件,看起来问题确实是错误的路由。目前,您应该手动为RESTful资源创建路由,当您应该让rails正确处理它时。
删除手册get
和match
行:
get "noticias/index"
match '/noticias', to: 'noticias#index', via: 'get'
用这个替换它们:
resources :noticias
如果noticias
应该指向ArticlesController
(或任何其他控制器),那么只需执行以下操作:
resources :noticias, to: 'articles'
另外,Matheus Caceres确定URL助手实际上应该是noticia_path
show
行为。 noticias_path
指向index
操作。 Rails试图成为&#34;有用的&#34;通过制作路线,帮助者,功能等,如果用英语阅读,听起来很合适,但对于另一种语言的单词可能不一定有意义。我不知道&#34; noticia&#34;但是在葡萄牙语中有任何意义。
另一方面,我上面指出的两条手动布线是多余的;实际上,它们都会匹配GET
请求,并将它们路由到noticias#index
。但是,请记住,路由按照它们在路由文件中出现的顺序进行匹配,因此永远不会调用match
行,因为路由在get
行上匹配。