次のRubyonRailsコードスニペットで少し問題があります-私は本を持っていて、本の名前を更新したいのですが、これが私がそれをしようとする方法です:
<h1>Edit the book "<%= @book.name %>"</h1>
<%= form_tag action: :update, id: @book do %>
<p>
<label for="book_name">Name</label>
<%= text_field :book, :name %>
<%= submit_tag 'Save changes' %>
</p>
<% end %>
これは私が本のコントローラーで行うことです:
def edit
@book = Book.find(params[:id])
end
def update
@book = Book.find(params[:id])
if @book.update_attributes(params[:book])
redirect_to :action => 'show', id => @book
else
@subjects = Subject.find(:all)
render :action => 'edit'
end
end
これらは私のルートです:
root to: 'authors#index'
resources :books, :authors
フォームの送信ボタンをクリックするとNo route matches [POST] "/books/5"
、滞在してlocalhost:3000 / books / 5 / editではなくlocalhost:3000 / books/5に移動します。
私はここで何が間違っているのですか?postメソッドではなく、どこかに更新するためのputメソッドがあるべきではありませんか?