Проблемы с отображением статей о Ruby on Rails?

Я создал форму для создания статей, но я могу видеть только опубликованные статьи на главной странице и не могу видеть отдельные статьи.

Каждый раз, когда я нажимаю «показать» для отдельной статьи в индексе, открывается пустая страница с URL-адресом типа 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 %>

article_controller.rb:

# GET /articles/1
# GET /articles/1.json
def show
  @article = Article.find(params[:id])
end

маршруты.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

person LuisLago    schedule 11.12.2013    source источник
comment
покажи свой routes.rb   -  person Зелёный    schedule 11.12.2013
comment
@LuisLago Я разместил ваш route.rb в вопросе для вас. Вы можете просто отредактировать вопрос в следующий раз, а не вставлять его в комментарии; иначе очень сложно читать.   -  person Paul Richter    schedule 11.12.2013
comment
спасибо, в следующий раз запомню   -  person LuisLago    schedule 11.12.2013


Ответы (2)


Это больше проблема с noticias_path, рассмотрите возможность проверки ваших маршрутов с помощью rake routes, но я думаю изменить noticias_path на noticia_path, возможно, это исправит.

person Matheus Caceres    schedule 11.12.2013
comment
Нет, не исправляет. В маршрутах у меня это match '/noticias', to: 'articles#index', via: 'get'. Я создал формы на английском языке, потому что я следовал некоторым учебникам на английском языке, но затем я создал маршрут к Notícias, потому что сайт будет на португальском языке. Должен ли я изменить статьи на уведомления во всем коде, чтобы избежать этой проблемы? - person LuisLago; 11.12.2013
comment
@LuisLago Для уточнения, вы имеете в виду, что у вас только есть этот индексный маршрут и ничего больше (это означает, что у вас нет строки, указывающей на действие show)? Это действительно похоже на проблему с маршрутизацией, но вам придется опубликовать весь файл route.rb, чтобы мы могли его увидеть. Если вы переименовали некоторые маршруты и тому подобное на португальский язык, возможно, вы что-то пропустили. - person Paul Richter; 11.12.2013
comment
@LuisLago, можете ли вы опубликовать содержимое route.rb для уточнения? - person Tom L; 11.12.2013
comment
извините за это, но в route.rb нет строки, указывающей на действие show - person LuisLago; 11.12.2013

Судя по вашему файлу маршрутов, проблема действительно в неправильной маршрутизации. В настоящее время вы вручную создаете маршруты для ресурсов RESTful, когда вы должны просто позволить рельсам обрабатывать это за вас должным образом.

Удалите строки руководства get и match:

get "noticias/index"

match '/noticias', to: 'noticias#index', via: 'get' 

И замените их на это:

resources :noticias

Если noticias должен указывать на ArticlesController (или любой другой контроллер), просто сделайте следующее:

resources :noticias, to: 'articles'

Кроме того, Матеус Касерес был прав в том, что помощник URL-адреса на самом деле должен быть noticia_path для действия show. noticias_path указывает на действие index. Rails пытается быть «полезным», делая маршруты, хелперы, функции и т.д., правильно звучащими при чтении на английском языке, но не обязательно имеющими смысл для слов на другом языке. Однако я не знаю, имеет ли смысл «уведомление» на португальском языке.

Еще одно небольшое замечание: две линии ручной маршрутизации, которые я указал выше, являются избыточными; на самом деле они оба будут соответствовать запросу GET и направлять их на noticias#index. Однако имейте в виду, что маршруты сопоставляются в том порядке, в котором они указаны в файле маршрутизации, поэтому строка match никогда не вызывалась бы, поскольку маршрут совпадал бы в этой строке get.

person Paul Richter    schedule 11.12.2013