0

J'ai une erreur lorsque j'appuie sur Afficher des articles et lorsque j'appuie sur Mettre à jour des articles lors de la modification de l'article. Je vais vous montrer l'image et mon code si vous pensez que ce n'est pas suffisant, demander fera très bien.Erreur dans Afficher et modifier des articles

Image de l'erreur show:

Image de l'erreur d'édition:

mon code:

edit.html.erb:

<h1>Edit the existing article</h1> 
    <% if @article.errors.any? %> 
     <h2>The following errors are informing you that if you don't do these then 
     your articles will not be edited</h2> 
     <ul> 
     <% @article.errors.full_messages.each do |msg| %> 
      <li> <%= msg %> </li> 
     <% end %> 
     </ul> 
    <% end %> 
     <%= form_for @article do |f| %> 
     <p> 
     <%= f.label :title %> 
     <%= f.text_field:title %> 
     </p> 
     <p> 
     <%= f.label :description %> 
      <%= f.text_area :description %> 
     </p> 
     <p> 
     <%= f.submit %> 
     </p> 
    <% end %> 
    <%= link_to "Back To The List Of Articles", articles_path %> 

spectacle. html.erb:

<h1>Showing selected articles</h1> 

    <p> 
     Title: <%= @article.title %> 


     </p> 
     <p> 
      Description: <%= @article.description %> 


    </p> 

    <%= link_to "Back To The List Of Articles", articles_path %> 
    <%= link_to "Edit This Article", edit_articles_path(@article) %> 

articles_controller:

class ArticlesController < ApplicationController 
    def index 

     @articles = Article.all 

    end 
     def new 
     @article = Article.new 
     end 
    def edit 
     @article = Article.find(params[:id]) 
    end 
    def update 
      @article = Article.find(params[:id]) 
      if @article.update 
       flash[:notice] = "article was updated" 
       redirect_to(@article) 
      else 
       render 'edit' 
      end 
    end 
     def create 
     @article = Article.new(article_params) 
      if @article.save 
      flash[:notice] = "Article was submitted succsefully" 
      redirect_to (@article) 
      else 
      render 'new' 
      end 
     end 
      def show 
      @article = Article.find(params[:id]) 
     end 
     private 
     def article_params 
      params.require(:article).permit(:title, :description) 
      end 
    end 

index.html.erb

<h1>ARTICLES</h1> 

     <table> 

     <tr> 

      <th>Title</th> 
      <th>Description</th> 


     </tr> 
     </table> 

      <% @articles.each do |article| %> 

    <td><%= article.title %></td> 
    <td><%= article.description %></td> 
    <td><%= link_to 'Edit', edit_article_path(article) %></td> 
    <td><%= link_to 'Show', article_path(article) %></td> 
    <% end %> 
    <%= link_to "Back To The List Of Articles", articles_path %> 

new.html.erb:

 <h1>Create an article</h1> 
    <% if @article.errors.any? %> 
    <h2>The following errors are informing you that if you don't do these then 
    your articles will not be created</h2> 
     <ul> 
     <% @article.errors.full_messages.each do |msg| %> 
      <li> <%= msg %> </li> 
     <% end %> 
     </ul> 
    <% end %> 
    <%= form_for @article do |f| %> 
     <p> 
     <%= f.label :title %> 
     <%= f.text_field:title %> 
     </p> 
     <p> 
     <%= f.label :description %> 
     <%= f.text_area :description %> 
     </p> 
     <p> 
     <%= f.submit %> 
     </p> 
    <% end %> 
    <%= link_to "Back To The List Of Articles", articles_path %> 

routes.rb:

Rails.application.routes.draw do 
    # The priority is based upon order of creation: first created -> highest 
priority. 
    # See how all your routes lay out with "rake routes". 

    # You can have the root of your site routed with "root" 
    # root 'welcome#index' 
resources :articles 

root 'pages#home' 
get 'about', to: 'pages#about' 


    # Example of regular route: 
    # get 'products/:id' => 'catalog#view' 

    # Example of named route that can be invoked with purchase_url(id: 
product.id) 
    # get 'products/:id/purchase' => 'catalog#purchase', as: :purchase 

    # Example resource route (maps HTTP verbs to controller actions 
automatically): 
    # resources :products 

    # Example resource route with options: 
    # resources :products do 
    #  member do 
    #  get 'short' 
    #  post 'toggle' 
    #  end 
    # 
    #  collection do 
    #  get 'sold' 
    #  end 
    # end 

    # Example resource route with sub-resources: 
    # resources :products do 
    #  resources :comments, :sales 
    #  resource :seller 
    # end 

    # Example resource route with more complex sub-resources: 
    # resources :products do 
    #  resources :comments 
    #  resources :sales do 
    #  get 'recent', on: :collection 
    #  end 
    # end 

    # Example resource route with concerns: 
    # concern :toggleable do 
    #  post 'toggle' 
    # end 
    # resources :posts, concerns: :toggleable 
    # resources :photos, concerns: :toggleable 

    # Example resource route within a namespace: 
    # namespace :admin do 
    #  # Directs /admin/products/* to Admin::ProductsController 
    #  # (app/controllers/admin/products_controller.rb) 
    #  resources :products 
    # end 
end 
+0

pouvez-vous montrer vos itinéraires? Et quel est le lien sur lequel vous cliquez pour afficher l'article? Pouvez-vous poster le backtrace complet là? – EJ2015

+0

ouais je vais mettre dans la question –

+1

Je ne sais toujours pas comment vous avez eu votre erreur avec '# show'. Avez-vous cliqué sur le lien "Afficher" sur votre page d'index? – EJ2015

Répondre

0

Vous ne montrez pas l'URL que vous visitez dans la première erreur, mais basé sur l'erreur je suppose que vous êtes allé accidentellement à http://devurl/article/edit < - dans vos itinéraires il montrera l'itinéraire show comme /article/#id, ainsi il a essayé pour utiliser "edit" comme ID pour l'article, ainsi le Couldn't find Article with id="edit".

Sur votre deuxième erreur, dans votre méthode update, vous appelez @article.update, mais le ActiveRecord update method exige le passage d'un id explicite et paramètres à être mis à jour. Essayez ceci ..

def update 
@article = Article.find(params[:id]) 
     if if @article.update(article_params) 
      flash[:notice] = "article was updated" 
      redirect_to(@article) 
     else 
      render 'edit' 
     end 
end 
  • modifié pour utiliser la méthode de mise à jour correcte. Merci @t s
+0

Ou vous pouvez appeler comme ceci 'if @ article.update (article_params)' –

+0

il me montre l'article après que je l'édite mais quand je le mets à jour il ne le met pas à jour –

+1

@ts est correct. Il était tard. Vous devriez utiliser '@ article.update (article_params)'. La façon dont je l'ai posté initialement était juste de trouver l'article et de le réenregistrer sans changer de champs. J'ai édité la réponse originale pour montrer la bonne manière – BiggeekTX