我在显示文章时以及在编辑文章时按更新文章时出错。如果你认为它还不够,我会告诉你图像和我的代码,问我会做得很好。
我的代码:
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
答案 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