麻烦在Ruby on Rails上展示文章?

时间:2013-12-11 13:14:07

标签: ruby-on-rails ruby forms blogs

我创建了一个用于创建文章的表单,但我只能在索引页面上看到已发布的文章,而且,我无法看到单独的文章。

每次我点击索引上单个文章的“显示”时,它都会打开一个空白页面,其网址为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

2 个答案:

答案 0 :(得分:1)

noticias_path更是一个问题,请考虑使用rake routes验证您的路线,但我认为将noticias_path更改为noticia_path,可以修复它。

答案 1 :(得分:0)

根据您的路线文件,看起来问题确实是错误的路由。目前,您应该手动为RESTful资源创建路由,当您应该让rails正确处理它时。

删除手册getmatch行:

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行上匹配。