Kesulitan menampilkan artikel di Ruby on Rails?

Saya membuat formulir untuk membuat artikel, tetapi saya hanya dapat melihat artikel yang diterbitkan di halaman indeks, dan saya tidak dapat melihat artikel satu per satu.

Setiap kali saya mengeklik 'tampilkan' untuk satu artikel di indeks, halaman kosong akan terbuka dengan URL seperti localhost:3000/articles.1, bukan localhost:3000/articles/1.

Saya tidak tahu apa yang salah dengan kodenya, ini mirip dengan kode yang saya miliki untuk membuat dan mengedit artikel sebagai admin dan berfungsi di sana, tetapi saya terus mendapatkan kesalahan ini.

Berikut kodenya:

tampilan/artikel/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 %>

tampilan/artikel/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 %>

artikel_controller.rb:

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

rute.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 sumber
comment
tunjukkan routes.rbmu   -  person Зелёный    schedule 11.12.2013
comment
@LuisLago Saya memposting rute Anda.rb di pertanyaan untuk Anda. Anda dapat mengedit pertanyaannya di lain waktu alih-alih menempelkannya di komentar; sangat sulit untuk membaca sebaliknya.   -  person Paul Richter    schedule 11.12.2013
comment
terima kasih, aku akan mengingatnya lain kali   -  person LuisLago    schedule 11.12.2013


Jawaban (2)


Ini lebih merupakan masalah dengan noticias_path, pertimbangkan untuk memverifikasi rute Anda dengan rake routes, tapi menurut saya untuk mengubah noticias_path menjadi noticia_path, mungkin dapat memperbaikinya.

person Matheus Caceres    schedule 11.12.2013
comment
Tidak, itu tidak memperbaikinya. Di rute saya punya ini match '/noticias', to: 'articles#index', via: 'get'. Saya membuat formulir dalam bahasa Inggris karena saya mengikuti beberapa tutorial dalam bahasa Inggris, tetapi kemudian saya membuat rute ke Noticias karena situsnya dalam bahasa Portugis. Haruskah saya mengubah artikel menjadi pemberitahuan di semua kode untuk menghindari masalah ini? - person LuisLago; 11.12.2013
comment
@LuisLago Untuk klarifikasi, maksud Anda Anda hanya yang memiliki rute indeks tersebut, dan tidak ada yang lain (artinya Anda tidak memiliki garis yang menunjuk ke tindakan show)? Ini memang terdengar seperti masalah perutean, tetapi Anda harus memposting seluruh rute.rb Anda agar kami dapat melihatnya. Jika Anda mengganti nama beberapa rute dan semacamnya ke bahasa Portugis, sepertinya Anda melewatkan sesuatu. - person Paul Richter; 11.12.2013
comment
@LuisLago, bisakah Anda memposting konten rute.rb untuk klarifikasi? - person Tom L; 11.12.2013
comment
maaf untuk itu, tapi tidak ada baris yang menunjuk ke tindakan show di rute.rb - person LuisLago; 11.12.2013

Berdasarkan file rute Anda, sepertinya masalahnya memang pada perutean yang salah. Saat ini, Anda membuat rute secara manual untuk sumber daya RESTful, padahal Anda seharusnya membiarkan Rails menanganinya dengan benar.

Hapus baris manual get dan match:

get "noticias/index"

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

Dan gantikan dengan ini:

resources :noticias

Jika noticias harus menunjuk ke ArticlesController (atau pengontrol lainnya), lakukan saja ini:

resources :noticias, to: 'articles'

Selain itu, Matheus Caceres benar bahwa pembantu URL sebenarnya adalah noticia_path untuk tindakan show. Angka noticias_path menunjuk ke tindakan index. Rails mencoba untuk "membantu" dengan membuat rute, pembantu, fungsi, dll, terdengar pantas jika dibaca dalam bahasa Inggris, tetapi mungkin belum tentu masuk akal untuk kata-kata dalam bahasa lain. Saya tidak tahu apakah "noticia" masuk akal dalam bahasa Portugis.

Catatan singkat lainnya, dua jalur perutean manual yang saya sebutkan di atas adalah mubazir; mereka sebenarnya akan mencocokkan permintaan GET dan mengarahkannya ke noticias#index. Namun, perlu diingat bahwa rute dicocokkan sesuai urutan kemunculannya di file perutean, sehingga baris match tidak akan pernah dipanggil, karena rute akan cocok dengan baris get tersebut.

person Paul Richter    schedule 11.12.2013