我有一个Books模型,它有CRUD操作。在config / routes.rb中,我声明了
map.resources :books
我的new.html.erb看起来像:
<%= form_for :book, url: books_path do |f| %>
<%= f.label :title %>
<%= f.text_field :title %>
<%= f.submit :Add %>
<% end %>
我在控制器中的创建方法如下所示:
def create
book = Book.new(authorized_params)
book.save
end
因此,当我从视图提交表单时,请求将转到'create'方法,并在数据库中创建该书的记录。很公平。现在,我想要一本书的编辑页面。所以,我在控制器中的编辑方法如下所示:
def edit
@book = Book.find_by(params[:id])
render :new
end
当我进入我的编辑视图时,它会自动在文本框中显示标题的值,这正是我的预期。但是当我尝试再次提交表单时(更改标题值之后),它再次创建新记录而不是更新它..
在阅读中我错过了哪些基本内容?我搜索了它,但没有找到满意的答案。
答案 0 :(得分:0)
问题在于您使用的是“&#39; new&#39;查看表单具有post方法的位置。如果要检查生成的路由,则post将用于create方法,即添加新记录。您必须创建一个新视图以进行编辑,其中表单目标URL为edit_book_path(@book),方法将为patch。补丁方法将路由到更新&#39;您可以在控制器中调用@ book.update。我没有编写确切的代码,但这些指示应该可以帮助您实现您想要的目标