显示和编辑文章时出错

时间:2017-09-12 21:13:50

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 cloud9-ide cloud9

我在显示文章时以及在编辑文章时按更新文章时出错。如果你认为它还不够,我会告诉你图像和我的代码,问我会做得很好。

显示错误的图片:

编辑错误的图片:

我的代码:

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

show.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

1 个答案:

答案 0 :(得分:0)

您不会在第一次出错时显示您正在访问的网址,但根据错误,我会假设您不小心转到http://devurl/article/edit&lt; - 在您的路线中,它会显示show路由为/article/#id,因此它尝试使用&#34;编辑&#34;作为文章的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