0

當我按下顯示文章時以及在編輯文章時按更新文章時出現錯誤。如果你認爲它不夠用,我會告訴你圖像和我的代碼,問會做得很好。顯示和編輯文章時出錯

圖片顯示錯誤的:

編輯錯誤的圖片:

我的代碼:

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 %> 

表演。 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

你能顯示你的路線嗎?你點擊鏈接顯示文章的鏈接是哪一個?你可以在那裏發佈完整的回溯? – EJ2015

+0

是的,我會提出這個問題 –

+1

我仍然不確定你是如何得到你的錯誤'#show'。您是否點擊了索引頁上的「顯示」鏈接? – EJ2015

回答

0

你不顯示你在第一個錯誤訪問URL,但是基於錯誤我會假設你不小心去http://devurl/article/edit < - 在你的路由,它會顯示在show路線爲/article/#id,所以它試圖使用「編輯」作爲文章的ID,因此Couldn't find Article with id="edit"

關於第二個錯誤,在你update方法,你打電話@article.update,但ActiveRecord update method需要傳遞一個明確的id和參數進行更新。試試這個..

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 
  • 編輯使用正確的更新方法。謝謝@ t s
+0

或者你可以這樣調用if @ article.update(article_params)' –

+0

它在我編輯它後顯示文章,但當我更新它時沒有更新它 –

+1

@ts是正確的。天色已晚。你應該使用'@ article.update(article_params)'。我最初發布的方式只是找到文章並在不更改任何字段的情況下將其保存。我編輯了原始答案以顯示正確的方式 – BiggeekTX